我知道 StackOverflow 上有一些关于此的问题,但我找不到我要找的东西。
我正在使用 pyyaml 读取( .load()
)一个 .yml
文件,修改或添加一个密钥,然后写入它( .dump()
)againec-0dacc4问题是我想保留转储后的文件格式,但它发生了变化。
例如,我编辑密钥 en.test.index.few
说 "Bye"
而不是 "Hello"
。
Python:
with open(path, "r", encoding = "utf-8") as yaml_file:
self.dict = yaml.load(yaml_file)
然后,更改密钥后:
with open(path, "w", encoding = "utf-8") as yaml_file:
dump = pyyaml.dump(self.dict, default_flow_style = False, allow_unicode = True, encoding = None)
yaml_file.write( dump )
亚姆:
前:
en:
test:
new: "Bye"
index:
few: "Hello"
anothertest: "Something"
后:
en:
anothertest: Something
test:
index:
few: Hello
new: Bye
有没有办法保持相同的格式?例如 qoutes 和订单。我为此使用了错误的工具吗?
我知道原始文件可能不完全正确,但我无法控制它(这是一个 Ruby-on-Rails i18n 文件)。
非常感谢。
原文由 nicosantangelo 发布,翻译遵循 CC BY-SA 4.0 许可协议
下面,改为使用
ruamel.yaml
。ruamel.yaml
正在 积极维护。与 PyYAML 不同,ruamel.yaml
支持:yaml.dump()
转储先前调用加载的字典时yaml.load()
:ruamel.yaml
巧妙地尊重 所有 输入格式。一切。整个文体辣酱玉米饼馅。整个文学界。 全部。库迁移
在现有应用程序中从 PyYAML 切换到
ruamel.yaml
通常只需将库导入更改为:这是有效的,因为
ruamel.yaml
是一个符合 PyYAML API 的 PyYAML 分支。不需要其他更改。
yaml.load()
和yaml.dump()
函数应继续按预期运行。往返保存及其能为您做什么
为了与 PyYaml 向后兼容,
yaml.load()
和yaml.dump()
函数默认 不 执行往返保存。为此,显式传递:Loader=ruamel.yaml.RoundTripLoader
关键字参数yaml.load()
。Dumper=ruamel.yaml.RoundTripDumper
关键字参数yaml.dump()
。一个示例来自
ruamel.yaml
文档:完成了。 注释、排序、引用和空格现在将被完整保留。