■ はじめに
TOMLファイルを読み込み そのデータ内を使うツールが必要になりそうなので PythonでTOMLをどう扱うかを調べてみた なお、TOMLについては、以下の関連記事を参照のこと
TOML
https://dk521123.hatenablog.com/entry/2023/04/25/103533
目次
【1】Python で TOML を扱うには 1)Python3.11以降 2)Python 3.11未満 【2】使用上の注意 1)tomllibは書き込み非対応 【3】サンプル 例1:tomllib (Python3.12) 例2:tomlkit (Python3.10)
【1】Python で TOML を扱うには
Python のバージョンによって異なる
1)Python3.11以降
* 標準ライブラリ「tomllib」が完備
https://docs.python.org/ja/dev/library/tomllib.html
2)Python 3.11未満
* pip などでライブラリをインストールする必要がある => 色々あるっぽい、、、toml, tomlkit and so on
tomlkit
pip install tomlkit
【2】使用上の注意
1)tomllibは書き込み非対応
* あくまで読み込みのみ
【3】サンプル
例1:tomllib (Python3.12)
import tomllib with open('test.toml','rb') as file: toml_object = tomllib.load(file) for key, value in toml_object.items(): print(f'{key}: {value}, type: {type(value)}') # <<output>> # title: TOML Example, type: <class 'str'> # owner: {'name': 'Tom Preston-Werner', 'dob': datetime.datetime(1979, 5, 27, 7, 32, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=57600)))}, type: <class 'dict'> # table_array: [{'key1': ['value1', 'value2']}], type: <class 'list'> toml_data = """ key = 'value' """ toml_data_object = tomllib.loads(toml_data) print(toml_data_object) # {'key': 'value'}
test.toml
# This is a comment title = "TOML Example" [owner] name = "Tom Preston-Werner" dob = 1979-05-27T07:32:00-08:00 [[table_array]] key1 = ["value1", "value2"]
例2:tomlkit (Python3.10)
from tomlkit.toml_file import TOMLFile toml = TOMLFile("./input.toml") toml_data = toml.read() print(f"toml_data: type = {type(toml_data)}, value = {toml_data}\n") title = toml_data.get("title") print(f"title = {title}") owner = toml_data.get("owner") print(f"owner = {owner}")
読み込み用TOML:input.toml
# This is a comment title = "TOML Example" [owner] name = "Tom Preston-Werner" dob = 1979-05-27T07:32:00-08:00 # date type [[table_array]] key1 = "value1"
Output
toml_data: type = <class 'tomlkit.toml_document.TOMLDocument'>, value = {'title': 'TOML Example', 'owner': {'name': 'Tom Preston-Werner', 'dob': DateTime(1979, 5, 27, 7, 32, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=57600), '-08:00'))}, 'table_array': [{'key1': 'value1'}]} title = TOML Example owner = {'name': 'Tom Preston-Werner', 'dob': DateTime(1979, 5, 27, 7, 32, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=57600), '-08:00'))}
参考文献
tomllib
https://atmarkit.itmedia.co.jp/ait/articles/2312/12/news018.html
https://gihyo.jp/article/2022/11/monthly-python-2211
toml
https://qiita.com/tetrapod117/items/d27388d5ed9386c1efd6
https://www.naka-sys.okinawa/python-toml/
tomlkit
https://7rikazhexde-techlog.hatenablog.com/entry/2023/03/10/234923
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 可変長引数 / args kwargs ~
https://dk521123.hatenablog.com/entry/2023/11/01/000915
外部コマンド実行 ~
https://dk521123.hatenablog.com/entry/2021/08/04/224716
TOML
https://dk521123.hatenablog.com/entry/2023/04/25/103533