如何使用 python 附加到 YAML 文件

How do I append to a YAML file with python

我有一个名为 data.yaml 的 YAML 文件:

---
'001':
  name: Ben
  email: ben@test.com

我想要一个如下所示的更新文件:

---
'001':
  name: Ben
  email: ben@test.com
'002':
  name: Lisa
  email: lisa@test.com
  numbers: 
    - 000-111-2222
    - 000-111-2223

如何在 python 中使用 yaml package/s 实现此目的?

编辑:

我试过:

import yaml
import io

data = {'002': {'name': 'Lisa', 'email': 'lisa@test.com', 'numbers': ['000-111-2222', '000-111-2223']}}

with io.open('data.yaml', 'w', encoding='utf8') as outfile:
    yaml.safe_dump(data, outfile, default_flow_style=False, allow_unicode=True)

方法safe_dump覆盖了文件内容,我只看到这是新的文件内容!

'002':
  name: Lisa
  email: lisa@test.com
  numbers: 
    - 000-111-2222
    - 000-111-2223

一般情况下,您可以不通过编写额外的内容来添加到文件中的 YAML 文档 该文件末尾的信息。此方法适用于具有的 YAML 文档 顶层的映射或序列是块样式,但即使 那么简单的附加只能用于某些情况下的文档。

只需将 YAML 加载到 Python 数据结构即可, update/extend 该结构,然后将其转储回去。这样你就不会 必须处理潜在的重复键、非裸文件和 使用简单时会导致 YAML 无效的其他问题 追加。假设您的原始文件名为 input.yaml,则 以下是诀窍:

import sys
from pathlib import Path
import ruamel.yaml

file_name = Path('input.yaml')

record_to_add = dict(name='Lisa', email='lisa@test.com', numbers=['000-111-2222', '000-111-2223'])

yaml = ruamel.yaml.YAML()
yaml.explicit_start = True
data = yaml.load(file_name)
data['002'] = record_to_add
yaml.dump(data, sys.stdout)

给出:

---
'001':
  name: Ben
  email: ben@test.com
'002':
  name: Lisa
  email: lisa@test.com
  numbers:
  - 000-111-2222
  - 000-111-2223