LoginSignup
1
0

More than 1 year has passed since last update.

OmegaConf の自分用テンプレート

Last updated at Posted at 2022-07-06

はじめに

(Qiita 初投稿です)
honeko と申します。
本記事は、Python で Config ファイル管理に便利な OmegaConf について、個人的によく使うテンプレートを備忘録的に残したものです。
情報量が多くなりすぎると使いにくいので、本当に最小限の情報のみを記載しています。
(具体的には YAML ファイルの読み出し / 要素へのアクセスなど)
限定公開で自分だけ閲覧できるようにするか悩みましたが、少しでも誰かの役に立てばと思い、公開するに至りました。
至らぬ点も多々あるかと思いますが、暖かい目で見ていただければ幸いです。
間違っている点がありましたら、コメント欄にてご指摘いただけると幸いです。

  • 環境
    • Python: 3.8.9
    • omegaconf: 2.2.2

テンプレート

早速ですが、色々なテンプレートを記載します。
外部ライブラリなので、使用する際は pip install omegaconf が必要です。

YAML ファイルの書き方

そもそも、YAML ファイルの書式を知らなければアクセスの仕方もわかりません。
本記事ではテンプレートの紹介のみ行うため、ここでは細かいことは説明せず、ざっくり雛形的なものを載せるに留めます。
半角スペースでインデントを揃える必要がある点に注意しましょう。

members.yaml
Tanaka:
  ID: 1000
  age: 34
  lang: Japanese

John:
  ID: 1001
  age: 28
  lang: English

# リスト型にしたい場合
Sato:
  - 1002
  - # ここは None として扱われる
  - Japanese

Config ファイルが一つの場合のデータ読み込み

先の書式に従って記述した Config ファイルは、下の関数で読み込むことができます。

load_conf.py
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 ファイルをマージします。
先の例だと、メンバーの追加などを行いたい場合に良いかもしれません。
一つの場合でも ↓ で代用できるので、迷ったらこちらを使ったほうが丸いと感じます。

load_confs.py
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 のチュートリアルなどが参考になると思います。
参考リンクから辿ることができるので、興味のある方は是非試してみてください。

参考リンク

1
0
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
1
0