我正在使用 Ruamel Python 库以编程方式编辑人工编辑的 YAML 文件。源文件具有按字母顺序排序的键。
我不确定这是一个基本的 Python 问题,还是一个 Ruamel 问题,但是我尝试对 Ruamel 的 OrderedDict 结构进行排序的所有方法对我来说都失败了。
例如,我很困惑,为什么基于这个配方的以下代码不起作用:
import ruamel.yaml
import collections
def read_file(f):
with open(f, 'r') as _f:
return ruamel.yaml.round_trip_load(
_f.read(),
preserve_quotes=True
)
def write_file(f, data):
with open(f, 'w') as _f:
_f.write(ruamel.yaml.dump(
data,
Dumper=ruamel.yaml.RoundTripDumper,
explicit_start=True,
width=1024
))
data = read_file('in.yaml')
data = collections.OrderedDict(sorted(data.items(), key=lambda t: t[0]))
write_file('out.yaml', data)
但是给定这个输入文件:
---
bananas: 1
apples: 2
生成以下输出文件:
--- !!omap
- apples: 2
- bananas: 1
即它把我的文件变成了一个 YAML 有序映射。
是否有捷径可寻?另外,我可以以某种方式简单地插入数据结构吗?