如何在Pyyaml导出YAML文件时移除!!int标记?
解决PyYAML导出YAML时数值字段带!!int标记的问题
问题核心:导出的YAML中出现!!int标记,是因为cores、disks等字段的类型为整数,而你使用default_style='"'强制所有值添加引号时,PyYAML会为非字符串类型附加类型标签以保留类型信息。
直接解决方案:将数值字段转换为字符串类型
在构建Server命名元组时,把原本是整数类型的字段显式转换为字符串,这样PyYAML导出时就会直接输出带引号的字符串,不会附加类型标记。
修改后的代码如下:
from collections import namedtuple import yaml # 假设sheet是已读取的Excel工作表对象 Server = namedtuple("Server", "name ip mask gw vlan template cores sockets memory disks") servers = [] for val in sheet.iter_rows(min_row=2, min_col=2, values_only=True): # 将cores、sockets、memory、disks字段转换为字符串 server = Server( val[1], val[2], val[3], val[4], val[5], val[6], str(val[7]), str(val[8]), str(val[9]), str(val[10]) ) servers.append(server._asdict()) vms_spec = {'vms': servers} with open('test.yml','w') as yamlW: yaml.safe_dump(vms_spec, yamlW, indent=2, default_style='"')
原理说明
当字段类型为字符串时,default_style='"'会直接给字符串添加双引号,PyYAML不需要额外的类型标记来区分类型,因此最终导出的YAML会呈现为你期望的"cores": "4"格式。
内容的提问来源于stack exchange,提问作者Yousef Almutairi
相关产品推荐
相关产品推荐

