使用 ruamel 将 yaml 文件转储到磁盘

Dump a yaml file to disk using ruamel

我在修改保存的 YAML 文件时遇到困难。我想加载它,在dict中添加一个属性,然后重新保存。这就是我所做的...(Python 3.9.7)

# my_file.yaml

- id: 001
  name: Steve
  likes:
    - soccer
    - steak
- id: 002
  name: Mary
  likes:
    - tennis
    - ice cream
from ruamel.yaml import YAML

with open("my_file.yaml") as file:
  yaml = YAML()
  l = yaml.load(file)
l[0]["address"] = "123 Street"
with open("my_file_new.yaml", 'w') as f:
  yaml.dump(l, f)

输出太长无法包含,但这绝对不是我所期望的。

如何获取只添加了一行的原始文件?

您可能想使用字符串作为 open() 的第一个参数,但您可能不想 这样做 在第二次调用中,作为 从您的代码中不清楚您的变量 my_new_file 在哪里声明,以及它有什么 属性 .yaml.

而是提供一个字符串作为 open() 的第一个参数,当你这样做时, 始终以二进制形式打开 YAML 文档('rb' resp. 'wb'), 或者(最好)使用 pathlib.Path():

import pathlib
from ruamel.yaml import YAML
old_path = pathlib.Path('my_file.yaml')
new_path = pathlib.Path('my_file_new.yaml')

yaml = YAML()
with open('my_file.yaml') as file:
  l = yaml.load(file)
# replace the previous two lines with: l = yaml.load(l, old_path)

l[0]['address'] = '123 Street'
with open('my_file_new.yaml', 'wb') as f:
  yaml.dump(l, f)
# replace the previous two lines with: yaml.dump(l, new_path)

print(new_path.read_text())

给出:

# my_file.yaml

- id: 001
  name: Steve
  likes:
  - soccer
  - steak
  address: 123 Street
- id: 002
  name: Mary
  likes:
  - tennis
  - ice cream