Python で YAML を読み書きするには、PyYAML というパッケージがある。
というわけで、忘れないようにメモ。
インストールは、ほかのパッケージと同様、pip でインストールできる。
^o^ > pip install pyyaml
Downloading/unpacking pyyaml
Downloading PyYAML-3.10.tar.gz (241kB): 241kB downloaded
Running setup.py egg_info for package pyyaml
Installing collected packages: pyyaml
Running setup.py install for pyyaml
checking if libyaml is compilable
Unable to find vcvarsall.bat
skipping build_ext
Successfully installed pyyaml
Cleaning up...
まずはサンプルのYAMLファイルを用意する。
^o^ > type sample_dict.yaml Python: Guido Ruby: Matz Perl: Larry
YAMLの読み込み
yaml.load関数を使う。
>>> import yaml
>>> f = open('sample_dict.yaml', 'r')
>>> data = yaml.load(f)
>>> f.close()
>>> data
{'Python': 'Guido', 'Ruby': 'Matz', 'Perl': 'Larry'}
>>> type(data)
<type 'dict'>
ちゃんと辞書型のデータになっているのがわかる。ファイルオブジェクトを作らなきゃいけないのが Ruby と比べてちょっと面倒だな。
あ、それから、インポートするのは、pyyaml じゃなくて yaml ね。
YAMLの書き出し
書き出すときには、yaml.dump関数。文字列が返ってくるので、これもやっぱりファイルオブジェクトを使ってファイルに書き出す。
>>> f = open('sample_dict2.yaml', 'w')
>>> f.write(yaml.dump(data))
>>> f.close()
>>> exit()
^o^ > type sample_dict2.yaml
{Perl: Larry, Python: Guido, Ruby: Matz}
ふむ、辞書(YAMLではマップって言うんだっけ?)のフォーマットが読み込んだファイルとは違うな。PyYAMLではこういうフォーマットにしかならないんだろうか。
リストの場合
リストでも試してみよう。
^o^ > type sample_list.yaml - Python - Ruby - Perl
読み込み:
>>> import yaml
>>> f = open('sample_list.yaml', 'r')
>>> data = yaml.load(f)
>>> f.close()
>>> data
['Python', 'Ruby', 'Perl']
>>> type(data)
<type 'list'>
書き出し:
>>> f = open('sample_list2.yaml', 'w')
>>> f.write(yaml.dump(data))
>>> f.close()
>>> exit()
^o^ > type sample_list2.yaml
[Python, Ruby, Perl]
やっぱりフォーマットが違う。
まあ、データの量とかも関係があるのかも。何百行にもなるようなリストを上のようなフォーマットで出力されたら見難くてしょうがない。
「YAMLの読み書き」への1件のフィードバック