LoginSignup
7
4

More than 5 years have passed since last update.

ruamel.yamlで順序を保持してyamlファイルの入出力を行う

Last updated at Posted at 2018-11-02

概要

やりたかったこと

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)

参考記事

7
4
0

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
7
4