使用 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
我在修改保存的 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