概要
やりたかったこと
yamlファイルの一部だけを変更して、別のyamlファイルとして出力する
ruamel.yamlについて
- ruamel.yaml は PyYAML のフォーク。PyYAMLに比べてこまめにアップロードされている
- コメント保持にも対応している
実行環境
- python 3.7.1
- ruamel.yaml 0.15.76
- Windows10 Pro
- Visual Studio Code
実装
インストール
pip install ruamel.yaml
スクリプト
from pathlib import Path
from ruamel.yaml import YAML, add_constructor, resolver
from collections import OrderedDict
# 入力時に順序を保持する
add_constructor(resolver.BaseResolver.DEFAULT_MAPPING_TAG,
lambda loader, node: OrderedDict(loader.construct_pairs(node)))
yaml = YAML()
yaml.default_flow_style = False
# ファイルから入力
with open(Path("in.yaml"), 'r', encoding='utf-8') as f:
data = yaml.load(f)
# 色々項目を変更する
# (略)
# ファイルに出力。出力順序はデフォルトで保持される
with open(Path('out.yaml'), 'w', encoding='utf-8') as f:
yaml.dump(data, f)