こんにちはCX事業本部Delivery部のさかじです。 YAMLからDocumentを作る作業をやっています。何も考えず手動で変換しよう作業していたのですが、間違いも発生しますし、量が多いのでツールを作ることにしました。
環境
- Windows 11
- WSL2 Ubuntu22.04.2 LTS
前提条件
$ python3 --version
Python 3.10.12
- PyYAMLのインストール
$ pip install PyYAML
- tabulateのインストール
$ pip install tabulate
サンプルYAMLファイルを作成
car.yml
cars:
- make: Toyota
model: Corolla
year: 2020
color: red
engine:
type: petrol
displacement: 1.8
- make: Honda
model: Accord
year: 2018
color: white
engine:
type: diesel
displacement: 2.2
- make: Subaru
model: Impreza
year: 2021
color: blue
engine:
type: petrol
displacement: 2.0
ちなみにこちらのサンプルデータはChatGPTに作ってもらいました。
YAML読み込み
$ python3
>>> import yaml
>>> with open('./car.yml') as stream:
>>> data = yaml.load(stream, Loader=yaml.SafeLoader)
※ PyYAML5.1以降はyaml.load(input)
と呼び出すことが非推奨になりました。参考
data
をprint()
すると以下のように見えました。
>>> print(data)
{'cars': [{'make': 'Toyota', 'model': 'Corolla', 'year': 2020, 'color': 'red', 'engine': {'type': 'petrol', 'displacement': 1.8}}, {'make': 'Honda', 'model': 'Accord', 'year': 2018, 'color': 'white', 'engine': {'type': 'diesel', 'displacement': 2.2}}, {'make': 'Subaru', 'model': 'Impreza', 'year': 2021, 'color': 'blue', 'engine': {'type': 'petrol', 'displacement': 2.0}}]}
Markdown書き出し
car.yml
は読み込んだ前提で進めます
簡単にkeyで表を作ってみます。
>>> from tabulate import tabulate
>>> cars = data['cars']
>>> print(tabulate(cars, headers='keys'))
cars
------------------------------------------------------------------------------------------------------------------------
{'make': 'Toyota', 'model': 'Corolla', 'year': 2020, 'color': 'red', 'engine': {'type': 'petrol', 'displacement': 1.8}}
{'make': 'Honda', 'model': 'Accord', 'year': 2018, 'color': 'white', 'engine': {'type': 'diesel', 'displacement': 2.2}}
{'make': 'Subaru', 'model': 'Impreza', 'year': 2021, 'color': 'blue', 'engine': {'type': 'petrol', 'displacement': 2.0}}
今回はGithubなどで使われるMarkdownで作りたいと思います。
>>> print(tabulate(cars, headers='keys', tablefmt='github'))
| make | model | year | color | engine |
|--------|---------|--------|---------|-----------------------------------------|
| Toyota | Corolla | 2020 | red | {'type': 'petrol', 'displacement': 1.8} |
| Honda | Accord | 2018 | white | {'type': 'diesel', 'displacement': 2.2} |
| Subaru | Impreza | 2021 | blue | {'type': 'petrol', 'displacement': 2.0} |
非常に簡単に出力できました。
参考サイト
- PyYAML
- 【PyYAML VS ruamel.yaml】PythonからYAMLファイルを触ってみた
- [Python]tabulateを使って様々な形式の表を作る
- PyYAMLがyaml.loadでYAMLLoadWarningを出してくるようになった件
- PyYAML yaml.load(input) Deprecation
最後に
YAMLから自由なフォーマットのMarkdownを作ることが容易にでき、ドキュメント化が自動化できます。
業務で使用するデータで機密のデータはオンラインツールで変換できませんので簡単に変換できるライブラリは非常に助かります。