我正在尝试使用
但是它似乎不支持
是否有一两行代码可以按排序后的键漂亮地打印YAML文件?
(请注意,我需要整个容器中的键按字母顺序排列,递归下去;仅对顶层进行字母排序是不够的。)
请注意,如果我使用
ruamel.yaml
将Python字典转储到YAML文件中。我熟悉json
模块的接口,其中漂亮地打印一个字典就像这样简单:import json
with open('outfile.json', 'w') as f:
json.dump(mydict, f, indent=4, sort_keys=True)
使用 ruamel.yaml
,我已经做到了这一步:
import ruamel.yaml
with open('outfile.yaml', 'w') as f:
ruamel.yaml.round_trip_dump(mydict, f, indent=2)
但是它似乎不支持
sort_keys
选项。 ruamel.yaml
也没有详尽的文档,在Google上搜索"ruamel.yaml sort"或"ruamel.yaml alphabetize"并没有找到我期望的简单程度的内容。是否有一两行代码可以按排序后的键漂亮地打印YAML文件?
(请注意,我需要整个容器中的键按字母顺序排列,递归下去;仅对顶层进行字母排序是不够的。)
请注意,如果我使用
round_trip_dump
,键将不会排序;如果我使用safe_dump
,输出的内容将不是“YAML风格”(或更重要的是“Kubernetes风格”的)YAML。我不希望在输出中有[]
或{}
。$ pip freeze | grep yaml
ruamel.yaml==0.12.5
$ python
>>> import ruamel.yaml
>>> mydict = {'a':1, 'b':[2,3,4], 'c':{'a':1,'b':2}}
>>> print ruamel.yaml.round_trip_dump(mydict) # right format, wrong sorting
a: 1
c:
a: 1
b: 2
b:
- 2
- 3
- 4
>>> print ruamel.yaml.safe_dump(mydict) # wrong format, right sorting
a: 1
b: [2, 3, 4]
c: {a: 1, b: 2}
default_flow_style=False
是启用“Kubernetes风格”YAML输出的适当方式吗?我可以尝试一下。 - Quuxplusonename
,value)对放入其中,或者使用.insert()
,如我所示。您还可以编写一个特定的序列化程序,了解name
,但由于PyYAML的实现方式(ruamel.yaml仍然遵循),这很难为任何键参数化(该答案需要单独的问题)。 - Anthon