23

シリアライズしたい辞書のリストがあります。

list_of_dicts = [ { 'key_1': 'value_a', 'key_2': 'value_b'},
                  { 'key_1': 'value_c', 'key_2': 'value_d'},
                  ...
                  { 'key_1': 'value_x', 'key_2': 'value_y'}  ]

yaml.dump(list_of_dicts, file, default_flow_style = False)

以下を生成します。

- key_1: value_a
  key_2: value_b
- key_1: value_c
  key_2: value_d
(...)
- key_1: value_x
  key_2: value_y

しかし、私はこれを取得したい:

- key_1: value_a
  key_2: value_b
                     <-|
- key_1: value_c       | 
  key_2: value_d       |  empty lines between blocks
(...)                  |
                     <-|
- key_1: value_x
  key_2: value_y

PyYAML のドキュメントでは、引数についてdump()非常に簡単に説明されており、この特定の主題については何もないようです。

ファイルを手動で編集して改行を追加すると、読みやすさが大幅に向上し、構造はその後も問題なくロードされますが、ダンプメソッドでそれを生成する方法がわかりません。

一般的に、単純なインデント以外に、出力の書式設定をより細かく制御する方法はありますか?

4

3 に答える 3

20

ライブラリでこれを行う簡単な方法はありません (yaml ダンパー構文ツリーのノード オブジェクトはパッシブであり、この情報を出力できません)。

stream = yaml.dump(list_of_dicts, default_flow_style = False)
file.write(stream.replace('\n- ', '\n\n- '))
于 2013-05-15T09:16:54.767 に答える