【发布时间】:2014-01-15 07:47:20
【问题描述】:
我知道在 SO 上有一些关于此的问题,但我找不到我要查找的内容。
我正在使用pyyaml 读取(.load()).yml 文件,修改或添加密钥,然后再次写入(.dump())。问题是我想在转储后保留文件格式,但它发生了变化。
例如,我将键 en.test.index.few 编辑为 "Bye" 而不是 "Hello"
Python:
with open(path, 'r', encoding = "utf-8") as yaml_file:
self.dict = pyyaml.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 )
Yaml:
之前:
en:
test:
new: "Bye"
index:
few: "Hello"
anothertest: "Something"
之后:
en:
anothertest: Something
test:
index:
few: Hello
new: Bye
有没有办法保持相同的格式?例如 qoutes 和 order。我是否为此使用了错误的工具?
我知道原始文件可能并不完全正确,但我无法控制它(它是一个 Ruby on Rails i18n 文件)。
非常感谢。
【问题讨论】:
-
yaml.dump有一个default_style参数。使用default_style='"'会将您的字符串值保留在双引号中,但您的键和任何其他值类型也将用双引号括起来。 -
谢谢!,我会记住的,如果不是钥匙,它会非常有用:(
-
您可能也很难订购钥匙。
yaml.load给你一个dict;它的键是无序的。yaml.dump可能以迭代进行的任何顺序输出。 -
新文件表示与原始文件完全相同的信息(在 YAML 中);没有理由保持相同的格式。
-
@Evert 没错,但我想保留格式,因为考虑到我创建的 sublime 包的上下文,它很有用github.com/NicoSantangelo/sublime-text-i18n-rails
标签: python python-3.x yaml quotes pyyaml