はじめに
PythonのYAMLパーサのpyyamlを利用して、YAMLのデシリアライズとシリアライズするコードスニペットと、その説明をメモしておく。
コード例
import yaml with open('input.yml') as file: data = yaml.load(file, Loader=yaml.CLoader) with open('output.yml', 'w') as file: yaml.dump(data, file, allow_unicode=True, default_flow_style=False, sort_keys=False)
load()
によるデシリアライズ
load()
の呼び出しにはLoader
の指定が必要。
指定しなくても実行できるが、以下のような警告文が出力される。
test.py:30: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. data = yaml.load(file)
過去はLoader
の指定は不要だったようだが、インタフェースを保ちつつ脆弱性への対応を行うためにこうなったらしい。
詳細は以下を参照。
PyYAML yaml.load(input) Deprecation
PyYAML Documentation > loader
dump()
によるシリアライズ
dump()
で実用的なYAMLを書き出す際には、いくつかのフラグをつけておいたほうが視認性が良くなる。