tomllib【設定ファイル (TOML形式)】3.11メモ ( 関連 外部リンク ) 関数構文 例 メモ概要設定ファイル (TOML形式)の操作 TOML (Tom's Obvious Minimal Language) 形式の詳細は 外部リンク 参照 書き込みは未サポート 関数・例外クラス関数備考load読み込み (ファイル)loads読み込み (文字列)例外クラス備考TOMLDecodeErrorTOML デコードエラー (ValueError のサブクラス)関連open【ファイルオープン】 外部リンクPython 標準ライブラリ tomllib --- Parse TOML files TOML 関数構文load【読み込み (ファイル)】loads【読み込み (文字列)】 load(fp, /, *, parse_float=float) loads(s, /, *, parse_float=float) 戻り値 (dict)設定ファイルの展開辞書 (TOML形式 と Python形式 の対応は下記参照) fpバイナリファイル オブジェクト s (str)TOML形式の文字列 parse_floatTOML float形式の解析関数 (引数:文字列) TOMLDecodeError 例外無効な TOML ドキュメント TOML形式Python形式備考table【テーブル型】dict【辞書型】string【文字列型】str【文字列型】integer【整数型】int【整数型】float【浮動小数点数型】float【浮動小数点数型】(デフォルト) parse_floatで変更可boolean【ブール型】(true / false)bool【ブール型】(True / False)offset date-time【オフセット付き日時型】datetime.datetime【日時型】タイムゾーン指定local date-time【ローカル日時型】datetime.datetime【日時型】タイムゾーンなしlocal date【ローカル日付型】datetime.date【日付型】local time【ローカル時刻型】datetime.time【時刻型】array【配列型】list【リスト型】 例例:load【読み込み (ファイル)】 #################### # test-simple.toml #################### key-string = "STRING" key-integer = 123 key-float = 123.456 key-boolean-true = true key-boolean-false = false key-datetime-offset = 2001-02-03 04:05:06+09:00 key-datetime = 2001-02-03 04:05:06 key-date = 2001-02-03 key-time = 04:05:06 key-array = ["STRING", 123, 123.456, true] import tomllib def convert(str_float): value = '[' + str_float + ']' return value FILE_TOML = 'test-simple.toml' with open(FILE_TOML, 'rb') as f: dic = tomllib.load(f) for key, value in dic.items(): print(key, value, type(value)) # 出力: # key-string STRING <class 'str'> # key-integer 123 <class 'int'> # key-float 123.456 <class 'float'> # key-boolean-true True <class 'bool'> # key-boolean-false False <class 'bool'> # key-datetime-offset 2001-02-03 04:05:06+09:00 <class 'datetime.datetime'> # key-datetime 2001-02-03 04:05:06 <class 'datetime.datetime'> # key-date 2001-02-03 <class 'datetime.date'> # key-time 04:05:06 <class 'datetime.time'> # key-array ['STRING', 123, 123.456, True] <class 'list'> with open(FILE_TOML, 'rb') as f: dic = tomllib.load(f, parse_float=str) for key, value in dic.items(): print(key, value, type(value)) # 出力: # key-string STRING <class 'str'> # key-integer 123 <class 'int'> # key-float 123.456 <class 'str'> # key-boolean-true True <class 'bool'> # key-boolean-false False <class 'bool'> # key-datetime-offset 2001-02-03 04:05:06+09:00 <class 'datetime.datetime'> # key-datetime 2001-02-03 04:05:06 <class 'datetime.datetime'> # key-date 2001-02-03 <class 'datetime.date'> # key-time 04:05:06 <class 'datetime.time'> # key-array ['STRING', 123, '123.456', True] <class 'list'> with open(FILE_TOML, 'rb') as f: dic = tomllib.load(f, parse_float=convert) for key, value in dic.items(): print(key, value, type(value)) # 出力: # key-string STRING <class 'str'> # key-integer 123 <class 'int'> # key-float [123.456] <class 'str'> # key-boolean-true True <class 'bool'> # key-boolean-false False <class 'bool'> # key-datetime-offset 2001-02-03 04:05:06+09:00 <class 'datetime.datetime'> # key-datetime 2001-02-03 04:05:06 <class 'datetime.datetime'> # key-date 2001-02-03 <class 'datetime.date'> # key-time 04:05:06 <class 'datetime.time'> # key-array ['STRING', 123, '[123.456]', True] <class 'list'> 例:loads【読み込み (文字列)】 import tomllib toml_str = ''' key-string = "String" key-integer = 1234 key-float = 1234.5678 key-boolean-true = true key-boolean-false = false key-datetime-offset = 2012-03-04 05:06:07+09:00 key-datetime = 2012-03-04 05:06:07 key-date = 2012-03-04 key-time = 05:06:07 key-array = ["String", 1234, 1234.5678, true] ''' dic = tomllib.loads(toml_str) for key, value in dic.items(): print(key, value, type(value)) # 出力: # key-string String <class 'str'> # key-integer 1234 <class 'int'> # key-float 1234.5678 <class 'float'> # key-boolean-true True <class 'bool'> # key-boolean-false False <class 'bool'> # key-datetime-offset 2012-03-04 05:06:07+09:00 <class 'datetime.datetime'> # key-datetime 2012-03-04 05:06:07 <class 'datetime.datetime'> # key-date 2012-03-04 <class 'datetime.date'> # key-time 05:06:07 <class 'datetime.time'> # key-array ['String', 1234, 1234.5678, True] <class 'list'> dic = tomllib.loads(toml_str, parse_float=str) for key, value in dic.items(): print(key, value, type(value)) # 出力: # key-string String <class 'str'> # key-integer 1234 <class 'int'> # key-float 1234.5678 <class 'str'> # key-boolean-true True <class 'bool'> # key-boolean-false False <class 'bool'> # key-datetime-offset 2012-03-04 05:06:07+09:00 <class 'datetime.datetime'> # key-datetime 2012-03-04 05:06:07 <class 'datetime.datetime'> # key-date 2012-03-04 <class 'datetime.date'> # key-time 05:06:07 <class 'datetime.time'> # key-array ['String', 1234, '1234.5678', True] <class 'list'> 例:各種データ #################### # test.toml #################### key-string = "STRING" key-integer = 123 key-float = 123.456 key-boolean-true = true key-boolean-false = false key-datetime-offset = 2001-02-03 04:05:06+09:00 key-datetime = 2001-02-03 04:05:06 key-date = 2001-02-03 key-time = 04:05:06 key-array = ["STRING", 123, 123.456, true] # ドット付きキー KEY.key-1 = "VALUE-1" KEY.key-2 = "VALUE-2" # インライン・テーブル inline-table = { key-1 = "V-1", key-2 = "V-2" } # テーブル [table-A] key-1 = "V-A-1" key-2 = "V-A-2" [table-B] key-1 = "V-B-1" key-2 = "V-B-2" # ドット付きテーブル [TABLE.table-C] key-1 = "V-C-1" key-2 = "V-C-2" # テーブルの配列 [[table-D]] key-1 = "V-1-1" key-2 = "V-2-1" [[table-D]] [[table-D]] key-1 = "V-1-3" key-2 = "V-2-3" key-3 = "V-3-3" import tomllib with open('test.toml', 'rb') as f: dic = tomllib.load(f) for key, value in dic.items(): print(key, value, type(value)) # 出力: # key-string STRING <class 'str'> # key-integer 123 <class 'int'> # key-float 123.456 <class 'float'> # key-boolean-true True <class 'bool'> # key-boolean-false False <class 'bool'> # key-datetime-offset 2001-02-03 04:05:06+09:00 <class 'datetime.datetime'> # key-datetime 2001-02-03 04:05:06 <class 'datetime.datetime'> # key-date 2001-02-03 <class 'datetime.date'> # key-time 04:05:06 <class 'datetime.time'> # key-array ['STRING', 123, 123.456, True] <class 'list'> # KEY {'key-1': 'VALUE-1', 'key-2': 'VALUE-2'} <class 'dict'> # inline-table {'key-1': 'V-1', 'key-2': 'V-2'} <class 'dict'> # table-A {'key-1': 'V-A-1', 'key-2': 'V-A-2'} <class 'dict'> # table-B {'key-1': 'V-B-1', 'key-2': 'V-B-2'} <class 'dict'> # TABLE {'table-C': {'key-1': 'V-C-1', 'key-2': 'V-C-2'}} <class 'dict'> # table-D [{'key-1': 'V-1-1', 'key-2': 'V-2-1'}, {}, {'key-1': 'V-1-3', 'key-2': 'V-2-3', 'key-3': 'V-3-3'}] <class 'list'>