tomllib【設定ファイル (TOML形式)】3.11

メモ ( 関連 外部リンク ) 関数構文

メモ

概要

  • 設定ファイル (TOML形式)の操作
    • TOML (Tom's Obvious Minimal Language) 形式の詳細は 外部リンク 参照
    • 書き込みは未サポート

関数・例外クラス

関数備考
load読み込み (ファイル)
loads読み込み (文字列)
例外クラス備考
TOMLDecodeErrorTOML デコードエラー (ValueError のサブクラス)

関数構文
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'>