ruamel.yamlによるYAMLの処理
ruamel.yamlとPyYAML
- PyYAML
- ruamel.yaml
今日時点で有名なのはPyYAMLの方だがアップデートが収束しつつあるのが懸念材料だ。
ruamel.yamlはPyYAMLのフォークだ。ruamel.yamlは熱心にアップデートされておりPyYAMLよりも細かい使い勝手が向上している。
比較
PyYAMLに対するruamel.yamlの大きな利点は以下の2点だろう。
- YAML 1.2対応(後述)
- コメントの読み込み
コメントを読み込めるのは興味深い。YAMLで記述された設定ファイルにはコメントが記載されている可能性が高い。大量の設定ファイルを一括変換したいけどsed仙人がいない!というときにはruamel.yamlが役立ちそうだ。
本記事ではruamel.yamlを取り上げる。PyYAMLは取り上げないがここで紹介するような簡単な処理ならPyYAMLもほとんど同じだ。
YAML 1.2対応
ruamel.yamlはYAML 1.2に正式対応している。
一方、PyYAMLのYAML 1.2対応については情報が錯綜している。未対応というサイトもあれば対応しているというサイトもある。以下の点から対応していないと考えるのが妥当だろう。
インストール
- pipかpipenvでインストールする
$ pipenv install ruamel.yaml
import
from ruamel import yaml
読み込む
with open('test.yaml', 'r') as stream: yaml_data = yaml.safe_load(stream)
書き込む
with open('test.yaml', 'w') as stream: yaml.dump(yaml_data, stream=stream)
Iterate
- 第1階層のキーのみを表示する
- 第2階層以下を表示したい場合はfor文をネストすること
for key in yaml_data: print(key)
要素へのアクセス
YAMLの型 | Pythonの型 |
---|---|
マッピング | dict |
シーケンス | list |
文字列 | str |
整数 | int |
真偽値 | bool |
null | None |
print(yaml_data['id'])