はじめに
(Qiita 初投稿です)
honeko と申します。
本記事は、Python で Config ファイル管理に便利な OmegaConf について、個人的によく使うテンプレートを備忘録的に残したものです。
情報量が多くなりすぎると使いにくいので、本当に最小限の情報のみを記載しています。
(具体的には YAML ファイルの読み出し / 要素へのアクセスなど)
限定公開で自分だけ閲覧できるようにするか悩みましたが、少しでも誰かの役に立てばと思い、公開するに至りました。
至らぬ点も多々あるかと思いますが、暖かい目で見ていただければ幸いです。
間違っている点がありましたら、コメント欄にてご指摘いただけると幸いです。
- 環境
- Python: 3.8.9
- omegaconf: 2.2.2
テンプレート
早速ですが、色々なテンプレートを記載します。
外部ライブラリなので、使用する際は pip install omegaconf
が必要です。
YAML ファイルの書き方
そもそも、YAML ファイルの書式を知らなければアクセスの仕方もわかりません。
本記事ではテンプレートの紹介のみ行うため、ここでは細かいことは説明せず、ざっくり雛形的なものを載せるに留めます。
半角スペースでインデントを揃える必要がある点に注意しましょう。
Tanaka:
ID: 1000
age: 34
lang: Japanese
John:
ID: 1001
age: 28
lang: English
# リスト型にしたい場合
Sato:
- 1002
- # ここは None として扱われる
- Japanese
Config ファイルが一つの場合のデータ読み込み
先の書式に従って記述した Config ファイルは、下の関数で読み込むことができます。
from omegaconf import OmegaConf
def load_config(cfg_file):
conf = OmegaConf.load(cfg_file)
return conf
# How to use
path_A = "path to A.yaml"
conf = load_config(path_A)
読み込んだ個々の設定にアクセスしたり、一覧を表示するには以下のようにします。
ここでは members.yaml を読み込んだ場合の例です。
print(type(conf.Tanaka.ID)) # -> int
print(conf["Sato"][1]) # -> None
print(OmegaConf.to_yaml(conf)) # YAML 形式で出力してくれる
Config ファイルが二つ以上の場合
二つ以上の Config ファイルをマージします。
先の例だと、メンバーの追加などを行いたい場合に良いかもしれません。
一つの場合でも ↓ で代用できるので、迷ったらこちらを使ったほうが丸いと感じます。
from omegaconf import OmegaConf
def load_config(*cfg_files):
base_confs = map(OmegaConf.load, cfg_files)
conf = OmegaConf.merge(*base_confs)
return conf
# How to use
path_A = "path to A.yaml"
path_B = "path to B.yaml"
conf = load_config(path_A, path_B)
おわりに
設定ファイルの作成と読み込みの機会があまりにも多い(そのくせ細かい部分で忘れやすい)ので、すぐにコピペできるようにテンプレートを用意しました。
より深く OmegaConf について学びたい場合、公式 GitHub のチュートリアルなどが参考になると思います。
参考リンクから辿ることができるので、興味のある方は是非試してみてください。
参考リンク