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 順序付きマップに変換されました。
これを行う簡単な方法はありますか?また、どういうわけかデータ構造に単純に挿入できますか?