【Python】設定ファイルをyamlで記述して簡単に読み込む方法

python

こんにちは、コウキです。

皆さんは、アプリやツールを作ったときに設定値はどこに記述していますか?
設定値はあとから変えることが多いので、外部ファイルに書いておきたいですよね。

テキストファイルに自分の好きなフォーマットで書いて、読み込んできても良いですが、使いやすいようにデータを加工するのは手間です。

僕は、以前このやり方でやっていましたが、dict型やlistの扱い方が難しく大変でした。

実は、yamlという形式で記述すると、とても簡単にこういったデータ構造を表現することができます。
しかも、Pythonではライブラリが用意されていて、読み込みも簡単です。

yamlとは

yamlとはデータの構造を表現するためのフォーマットです。
Pythonでいうところのリストや辞書型などを簡単に表現することができます。

書き方もPythonになんとなく似ていて、読みやすくて書きやすいデータ構造になっています。

Pythonでyamlファイルを読み込む方法

最初は、yamlファイルを読み込む方法について紹介します。
後でyamlファイルの書き方は後で紹介します。

まずは、pipでPyYAMLをインストールします。

pip3 install PyYAML

インストールできたら、実際に読み込んでみます。
設定ファイルの名前はなんでも良いですが、ここでは'config.yaml'にします。

import yaml
with open('config.yaml') as file:
    config = yaml.safe_load(file.read())

これでyamlファイルを読み込むことができます。

yamlファイルの書き方

次はyamlファイルの書き方についてです。
リストの書き方と辞書型の書き方について紹介します。

リストの書き方

リストを書くときには先頭に'-'をつけます。

- りんご
- ゴリラ
- ラッパ

それではPythonでこのyamlファイルを読み込んでみましょう。

['りんご', 'ゴリラ', 'ラッパ']

このようにリストで取得できました。

辞書型の書き方

name: 斎藤祐介
password: '1234'
mail: abc@example.com
age: 18
{'name': '斎藤祐介', 'password': '1234', 'mail': 'tanaka@example.com', 'age': 18}

辞書型で取得することができました。

数字は自動で数値に変換してくれます。
文字列で取得したい場合は、''で囲います。

リストや辞書型を入れ子にする

リストや辞書は入れ子にすることもできます。
入れ子にするにはインデントを使います。

acount:
    -
        name: 斎藤祐介
        mail:
            - abc@example.com
            - xyz@example.com
        password: '1234'
        age: 18
    -
        name: 田中和夫
        mail:
            - rts@example.com
            - opl@example.com
        password: '1234'
        age: 18
{'acount': [{'name': '斎藤祐介', 'mail': ['abc@example.com', 'xyz@example.com'], 'password': '1234', 'age': 18}, {'name': '田中和夫', 'mail': ['rts@example.com', 'opl@example.com'], 'password': '1234', 'age': 18}]}

入れ子はいくつでも作ることができるし、リストと辞書を混ぜて使うこともできます。

リストや辞書型を一行で書く

リストや辞書型を一行で書くこともできます。

リストの場合はこんな感じです。

[file1, file2, file3]

辞書型の場合はこんな感じです。

{"国語": 60, "数学": 40, "理科": 90}

Pythonの書き方と同じですね。

yamlで使える型の種類

ここまでで扱った型の種類は文字列や整数だけでしたが、yamlでは他にもいろいろな型を使うことができます。
ここでは、よく使うものに絞って紹介します。

'Int': 100  # 整数
'Float': 10.5  # 浮動小数点
'Str': 'あいうえお'  # 文字列
'True': true  # bool型のtrue
'False': false  # bool型のfalse
'None': null  # None
'date': 2020-01-01 # 日付
'datetime': 2020-01-01 00:00:00 +09:00  # 日時

少しPython書き方と異なるものがありますね。

最後に

今回はyamlファイルの書き方について紹介しました。

簡単に書けて、簡単に読み込めるので、設定ファイルをyamlで書くのは、とてもおすすめです。
yamlはPython以外にもいろいろな場面で使うことがあるので、覚えておいて損はないと思います。

みなさんも、ぜひ使ってみてください^^

コメント

タイトルとURLをコピーしました