如何在python中向YAML文件添加新字段?

时间:2018-04-11 03:51:45

标签: python parsing yaml field pyyaml

我有一个包含内容的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

如何将值为欧洲的“大陆”字段添加到每个州?

2 个答案:

答案 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注释可能会发生变化。