python - 使用 ruamel 将 yaml 文件转储到磁盘
问题描述
我在修改已保存的 YAML 文件时遇到了困难。我想加载它,向字典添加一个属性,然后重新保存它。这就是我所做的......(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()
,并且当您使用它时,始终以二进制 ( 'rb'
resp. 'wb'
) 形式打开 YAML 文档,或者(最好)使用 a 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
推荐阅读
- azure - 如何在 Azure 容器实例中使用 OneDrive 文件?
- c# - 如何在不使用 SQL 查询的情况下更新 dataGridView 中的数据
- ios - 为什么使用 UserDefaults 在 iOS 上存储敏感信息不安全?
- powerquery - M 查询结果为“需要令牌文字”
- sqlite - 为什么 Heroku Web 应用程序的运行速度比 Flask 的 localhost 慢得多?
- ios - 无法使用配置文件在 Xcode 上运行应用程序
- python - Pyobdc 声称重复索引
- swift - 如何扩展 SCNScene?
- sql - 是否可以使用 MERGE 语句使用本地数据库更新 Azure 中的表?
- .net - MVC 应用程序无法登录到 Dynamics CRMOrganizationServiceProxy 为空错误