2017-11-27 22 views
0

私はruamel.yamlライブラリを使って辞書をyamlファイルにダンプしています。しかし、それは私がそれを望む方法を振る舞いません。ruamel.yaml:開始時に余分な ' - 'を追加するためにdump()を変更する

はどのようにして得ることができる:

--- 
- a: 
    - foo: bar 
    - bar: foo 

の代わりに:

data = { 
    'a': [ 
     {'foo':'bar'}, 
     {'bar':'foo'} 
     ] 
    } 

他のライブラリ:

a: 
    - foo: bar 
    - bar: foo 

私はからデータを抽出していますyaml.dump()と同じ機能性が提案のために公開されています。

+0

をそれはあなたが望むものを私に明確ではありません。 '-'の後に空白がありませんか? '-foo'は単純に文字列' -foo'です。シーケンスエントリを作成するには、ダッシュの後にスペースが必要です。 – tinita

+0

'-a:'の前に '-'を追加して、' - a: 'のように見せます。この形式のyamlファイルが必要な別のライブラリがあるため、解析が必要です。 –

+0

その後、スペースを含む投稿を編集してください。おそらく、シーケンスのためにデータの周りに '[...]'を追加するだけです。 – tinita

答えて

0

YAMLインスタンスには、explicit_start = Trueが設定されています。また、あなたは、あなただけではなく、a 2行目の- aをしたい場合は、トップレベルのリストを作成する必要があります。

import sys 
import ruamel.yaml 

yaml_str = """\ 
--- 
-a: 
    -foo: bar 
    -bar: foo 
""" 

data = [{ 
    'a': [ 
     {'foo':'bar'}, 
     {'bar':'foo'} 
     ] 
    }] 

yaml = ruamel.yaml.YAML() 
yaml.explicit_start = True 
yaml.dump(data, sys.stdout) 

ができます:

--- 
- a: 
    - foo: bar 
    - bar: foo 
+0

これは '---'を助けましたが、私はまだ '-a:'を取得しませんでした。 @Anthon –

+0

私は辞書からデータを取得していることを忘れていました。投稿を編集します。 –

+0

キーが '-a'なので、出力に' -a'が出ます。 – Anthon

関連する問題