概要
pythonでyaml扱う際に,ブロックスタイルで書き込む方法
使用するのはPyYAMLです
読み書き
こんなyamlファイルがあったとします
test1: test
test2: test
読み込みは以下のように,辞書型で読み込めます.
>>> import yaml
>>> f = open("test.yml", "r+")
>>> data = yaml.load(f)
>>> data
{'test1': 'test', 'test2': 'test'}
書き込むときは,以下のようにdump()
で書き込みます.
>>> data
{'test1': 'test', 'test2': 'test'}
>>> f.write(yaml.dump(data))
>>> f.close()
書き込まれたtest.ymlを見ると以下のようになっており,期待通りではありません.
非常に見づらい.
test1: test
test2: test
{test1: test, test2: test}
ブロックスタイルで書き込み
フロースタイルではなく,ブロックスタイルで書き込むには,dump()
時にdefault_flow_style=False
を設定します.
>>> f.write(yaml.dump(data, default_flow_style=False))
test1: test
test2: test
test1: test
test2: test
期待通りになりました.
OrderedDictを使って書き込む
dump()
でインスタンスオブジェクトをyamlに変換した場合,インスタンスオブジェクトのタグが出力される問題があります.
例えば,OrderedDictとか
それは
PyYAMLでyamlをload/dumpする時の振る舞いを変えてみる方法とその詳細について
に詳しく書かれていました.
参考
http://gihyo.jp/dev/serial/01/yaml_library/0003
http://blog.panicblanket.com/archives/1076