MENU

TOML設定をPythonで読む|コメントと値の検査

当ページのリンクには広告(PR)が含まれていることがあります。
TOML設定をPythonで読む|コメントと値の検査。コメント付き設定、TOML を読む、型と範囲を検査の処理例。

設定の意味をコメントで残したいのに、JSONへコメントを書くと読み込みが止まる場合は、TOMLも選択肢になります。TOMLは表やコメントを持てる設定ファイルの形式です。Python 3.11以降なら、標準ライブラリのtomllibで読めます。

ただし、読めた設定がそのツールに合うとは限りません。形式の解析と、必要な項目・型・範囲の検査を分けることで、誤設定を処理の開始前に返せます。

目次

コメント付きの設定を読んで検査

次は入力パスと、一度に処理する上限を持つ架空の設定です。実ファイルは作らず、文字列をUTF-8のバイト列へしてtomllib.loadへ渡します。

from io import BytesIO
import tomllib

text = """
[paths]
input = "data/input.csv"
[run]
limit = 100  # 一度に扱う上限
"""

def read_settings(data):
    config = tomllib.load(BytesIO(data.encode("utf-8")))
    limit = config.get("run", {}).get("limit")
    path = config.get("paths", {}).get("input")
    if type(limit) is not int or not 1 <= limit <= 1000:
        raise ValueError("limitは1から1000の整数です")
    if not isinstance(path, str) or not path.strip():
        raise ValueError("inputを指定してください")
    return path, limit

path, limit = read_settings(text)
print("上限:", limit)
print("入力:", path)
rejected = 0
for wrong in ["0", "true", '"100"']:
    try:
        read_settings(text.replace("limit = 100", "limit = " + wrong))
    except ValueError:
        rejected += 1
print("不正値を拒否:", rejected)
assert (path, limit) == ("data/input.csv", 100)
assert rejected == 3

正常な上限100が読め、0、真偽値true、文字列の100は拒否されます。Windows・Python 3.12.10で、この解析と検査を確認しました。実際のCSVを読み込んだり、入力パスの存在を確認したりする処理は含んでいません。

実ファイルを読む場合は、rbモードで開いたファイルをtomllib.loadへ渡します。文字列から直接読むtomllib.loadsとは、受け取るものが違います。

trueを整数として通さない

Pythonのboolはintの一種として扱われるため、isinstance(limit, int)だけで判定するとtrueも通ることがあります。整数だけを許す例ではtype(limit) is intで分けています。

上限の1から1000もこの架空ツールの条件です。TOML全体の制限ではありません。別のツールへ使う場合は、実際に処理できる範囲と、設定の単位を決めてください。

構造が違う設定や項目の不足も、設定を受け取る処理でも確認する必要があります。読み込みエラーを空の辞書へ置き換えて続けると、設定を読み込めなかったのか、既定値で動かしたのか分かりにくくなります。

設定を読んでも書き戻せない

tomllibは解析用で、TOMLを書き出すAPIは持ちません。ファイルへ設定を保存する画面や自動更新が必要なら、その工程は別に考えます。コメントを保ったまま書き戻せるかも、読む機能とは別の条件です。

また、設定ファイルを分けただけでAPIキーが安全になるわけではありません。共有する見本には架空の値だけを置き、実際の秘密や個人情報を含めないようにします。

最初は小さな設定を読み、必要な値を検査して表示するところまで試してください。処理対象のパスや実行回数が正しいと確かめてから、実データを扱う処理へつなげます。

形式の違いはJSONの読み方と保存、秘密をコードから分ける考え方は環境変数の基本で補えます。

参考資料

Python tomllib公式資料を2026年11月1日に確認しました。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次