我有一个包含内容的YAML文件:
---
'Croatia':
population: 4600000
capital: Zagreb
'Italy':
population: 60000000
capital: Rome
我如何添加新字段:
---
'Croatia':
population: 4600000
capital: Zagreb
continent: Europe
'Italy':
population: 60000000
capital: Rome
continent: Europe
如何将值为欧洲的“大陆”字段添加到每个州?
答案 0 :(得分:0)
加载它,像往常一样在字典中更新字段并再次转储。
data = yaml.load(...)
data['Croatia']['continent'] = 'Europe'
yaml.dump(data, ...)
答案 1 :(得分:0)
如果你想保留你的原始YAML布局和引用,那么你通常不会在没有花费太多精力的情况下使用pyyaml。
使用ruamel.yaml
(免责声明:我是该软件包的作者)这更简单,但您仍然需要通过两个空格为顶级缩进做一些事情(使用transform
参数):
import sys
import ruamel.yaml
yaml_str = """\
---
'Croatia':
population: 4600000
capital: Zagreb
"""
def indent_data(s):
return s.replace('\n', '\n ')
yaml = ruamel.yaml.YAML()
# yaml.indent(mapping=4, sequence=4, offset=2)
yaml.preserve_quotes = True
yaml.explicit_start = True
data = yaml.load(yaml_str)
data['Croatia']['continent'] = 'Europe'
yaml.dump(data, sys.stdout, transform=indent_data)
给出:
---
'Croatia':
population: 4600000
capital: Zagreb
continent: Europe
原始文档中的任何注释都将保留在输出中,但由于额外的缩进,EOL注释可能会发生变化。