LoginSignup
66
47

More than 5 years have passed since last update.

pythonでyamlの扱い

Last updated at Posted at 2016-12-01

概要

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

66
47
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
47