【Python】PyYAMLでのYAMLファイル管理

Python で YAML ファイルの管理をする際に使用する PyYAML の基本的な使い方について解説します。
目次
PyYAML での YAML ファイル管理
YAML ファイルは、YAML Ain’t Markup Language ファイルのことで、XML や JSON と同じように構造化されたデータを表現するためのフォーマットです。
拡張子は「.yml」または「.yaml」です。正式な拡張子としては .yaml ですが、拡張子は一般的に 3 文字のものが多く使われるため .yml が使用されることが多いです。
YAML ファイルの簡単な例は以下になります。
DB_SERVER: HOST: 192.168.1.200 PORT: 3306 WEB_SERVER: HOST: 192.168.1.100 PORT: 80
YAML ファイルでは、「キー: 値」の形式になっており、例では、DB_SERVER というキーの下には、HOST と PORT の情報を持っており、それぞれの値が何であるのかというような階層構造を簡単に表現できます。また、YAML ではインデントを使ってデータの階層構造を表し、XML のような終了タグもないので、書きやすくかつ読みやすいです。
YAML は各種設定ファイル、ログ、データ保存など色々な用途で使用されます。Python でYAMLファイルを扱う場合には、PyYAML というライブラリを使用します。
この記事では、PyYAML を使って YAML ファイルを扱う方法を紹介します。
PyYAML のインストール
PyYAML を使用するにはインストールが必要です。以下のように pip でインストールをしてください。
pip install pyyaml
PyYAML の基本的な使い方
PyYAML の基本的な使い方を以降で紹介します。なお、PyYAML のバージョンは記事更新時点の PyYAML 6.0 で確認をしています。バージョンによっては挙動が異なる場合があることはあらかじめご了承ください。
PyYAML を用いて YAML ファイルの入出力をする場合には、以下のようにします。
import yaml
yaml_data = {
"WEB_SERVER": {"HOST": "192.168.1.100", "PORT": 80},
"DB_SERVER": {"HOST": "192.168.1.200", "PORT": 3306},
}
# YAMLファイルの書き込み
with open("config.yml", "w") as yml_file:
# 書き込み
yaml.dump(yaml_data, yml_file)
# YAMLファイルの読み込み
with open("config.yml", "r") as yml_file1:
# 読み込み
load_data = yaml.load(yml_file1, Loader=yaml.SafeLoader)
print(type(load_data))
# 読み込んだ結果の参照
print(load_data["WEB_SERVER"])
print(load_data["WEB_SERVER"]["HOST"])
print(load_data["WEB_SERVER"]["PORT"])
print(load_data["DB_SERVER"])
print(load_data["DB_SERVER"]["HOST"])
print(load_data["DB_SERVER"]["PORT"])【実行結果】
<class 'dict'>
{'HOST': '192.168.1.100', 'PORT': 80}
192.168.1.100
80
{'HOST': '192.168.1.200', 'PORT': 3306}
192.168.1.200
3306【出力結果ファイル config.yml の内容】 DB_SERVER: HOST: 192.168.1.200 PORT: 3306 WEB_SERVER: HOST: 192.168.1.100 PORT: 80
例では、YAML ファイルに書き込む辞書データを用意し YAML ファイルの config.yml へ書き込みします。その後、書き込んだ YAML ファイルを読み込んで表示しています。
YAML ファイルの書き込み
PyYAML を用いてファイルを書き込む場合には以下のようにします。
import yaml
yaml_data = {
"WEB_SERVER": {"HOST": "192.168.1.100", "PORT": 80},
"DB_SERVER": {"HOST": "192.168.1.200", "PORT": 3306},
}
# YAMLファイルの書き込み
with open("config.yml", "w") as yml_file:
# 書き込み
yaml.dump(yaml_data, yml_file)まず、PyYAML を使用するには yaml をインポートします。
書き込むデータは辞書形式で用意し、YAML ファイルへの書き込みを行う場合には、dump 関数に書き込み対象の辞書を渡して書き込みを行います。
YAML ファイルの読み込み
PyYAML でファイルを読み込む場合には以下のようにします。
# YAMLファイルの読み込み
with open("config.yml", "r") as yml_file1:
# 読み込み
load_data = yaml.load(yml_file1, Loader=yaml.SafeLoader)YAML ファイルの読み込みを行う場合には、load 関数を使用します。load 関数にはファイルオブジェクトと Loader 引数で読み込み用のローダーを指定します。例では、yaml.SafeLoader を指定しています。
なお、Loader=yaml.SafeLoader を省略した safe_load 関数を load 関数の代わりに使っても構いません。
# YAMLファイルの読み込み
with open("config.yml", "r") as yml_file1:
# 読み込み
load_data = yaml.safe_load(yml_file1)なお、Loader には種類がありますが、SafeLoader は信頼できないデータソースを読み込みで推奨されるものです。基本こちらを使用するでよいかと思います。
print(type(load_data)) # 読み込んだ結果の参照 print(load_data["WEB_SERVER"]) print(load_data["WEB_SERVER"]["HOST"]) print(load_data["WEB_SERVER"]["PORT"]) print(load_data["DB_SERVER"]) print(load_data["DB_SERVER"]["HOST"]) print(load_data["DB_SERVER"]["PORT"])
上記部分で読み込んだデータを確認していますが、load 関数では Python の辞書として読み込みが行われるため、簡単に設定情報にアクセスすることが可能です。
まとめ
Python で YAML ファイルの管理をする際に使用する PyYAML の基本的な使い方について解説しました。
YAML は各種設定ファイル、ログ、データ保存等いろいろな用途で使用できます。PyYAML の使い方を覚えて YAML ファイルを有効活用してください。
上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。

