業務でtomlを使ったので復習。
TOMLとは
TOML (Tom's Obvious, Minimal Language)
設定ファイルなどに適したシンプルなフォーマット。
人間が読み書きしやすく、かつ簡単にパースできます。
TOMLの公式サイトはこちら
toml関連のライブラリはいくつかありますが、今回はこちらを使いました。
インストール
pip install toml
TOMLファイルの読み込み (load)
toml.load()
関数でTOMLファイルを読み込めます。
引数にはファイルパスまたはファイルオブジェクトを指定。
読み込んだデータはPythonの辞書型に変換されます。
import toml
# tomlファイルの場所
toml_path = "toml_data/config.toml"
# ファイルパスを指定
toml_data = toml.load(toml_path)
# # ファイルオブジェクトを指定することも可能
# with open(toml_path, "r") as f:
# toml_data = toml.load(f)
print(toml_data)
config.toml
[servers]
[servers.alpha]
ip = "10.0.0.1"
role = "frontend"
[servers.beta]
ip = "10.0.0.2"
role = "backend"
出力例
{'servers': {'alpha': {'ip': '10.0.0.1', 'role': 'frontend'}, 'beta': {'ip': '10.0.0.2', 'role': 'backend'}}}
上記のconfig.toml
をJSONで表現すると、以下のようになります。
{
"servers": {
"alpha": {
"ip": "10.0.0.1",
"role": "frontend"
},
"beta": {
"ip": "10.0.0.2",
"role": "backend"
}
}
}
TOMLファイルへの書き込み (dump)
toml.dump()
関数を使って、Pythonの辞書型データをTOMLファイルに書き込めます。
第一引数に書き込むデータ、第二引数にファイルパスまたはファイルオブジェクトを指定します。
import toml
toml_path = "./toml_data/toml_dump.toml"
toml_string = """
# This is a TOML document.
name = "Example"
version = "1.0"
port = 3000
"""
# ファイルパスを指定
parsed_toml = toml.loads(toml_string)
# ファイルオブジェクトを指定
with open(toml_path, "w") as f:
toml.dump(parsed_toml, f)
出力結果
name = "Example"
version = "1.0"
値の取得 (get)
toml.load()
で読み込んだ辞書データから値を取得するには、以下の方法があります。
- キーを使う方法
- get()を使う方法
存在しないキーを指定した場合、KeyError
が発生します。これを防ぐには、get()
メソッドを使用します。get()
メソッドは、キーが存在しない場合にデフォルト値を返すことができます。
import toml
# tomlファイルの場所
toml_path = "toml_data/toml_dump.toml"
# ファイルパスを指定
toml_data = toml.load(toml_path)
# ----- get() を使う場合 -----
# tomlからportの値を取得
port = toml_data.get("port", 8080)
print(port) # 出力結果:3000
# tomlからportの値を取得(存在しない要素名)
port = toml_data.get("port_num", 8080)
print(port) # 出力結果:8080
# ----- キーを使う場合 -----
# tomlからキーでportの値を取得
port_by_key = toml_data["port"]
print(port_by_key) # 出力結果:3000
# tomlからキーでportの値を取得(存在しないキー)
port_by_key = toml_data["port_num"]
print(port_by_key) # KeyError: 'port_num'
まとめ
今回は、Pythonで簡単にTOMLファイルを扱う方法を紹介しました。
文法については、改めてご紹介します。