8

を使用して、Python dict を YAML ファイルにダンプしようとしていますruamel.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 ファイルをきれいに印刷するための 1 つまたは 2 つのライナーはありますか?

(コンテナ全体で再帰的にキーをアルファベット順に並べる必要があることに注意してください。最上位レベルをアルファベット順に並べるだけでは十分ではありません。)


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}
4

3 に答える 3