TOML (Tom’s Obvious, Minimal Language) は、設定ファイルやデータ交換用の簡潔なフォーマットです。しかし、TOMLファイルをPythonで扱う際には、いくつかの一般的な問題に遭遇する可能性があります。この記事では、TOMLファイルの一般的な問題とその解決策について説明します。
目次
セクションの終了の明示
TOMLでは、セクションの終了は自動的に行われます。新しいセクションが始まるか、ファイルが終了すると、前のセクションは終了します。
問題:
[[articles]]
title = "a"
description = "b"
other = "aaa"
この例では、other
は articles
セクションの一部として解釈されます。
Tomlを読み込んだ結果:
{'articles': [{'title': 'a', 'description': 'b', 'other': 'aaa'}, {'title': 'a', 'description': 'b'}]}
この出力では、other
が articles
セクションに含まれていることがわかります。
解決策:
新しいセクションを作成するか、other
をファイルの最初に置くことで、それを独立したキーとして扱います。
other = "aaa"
[[articles]]
title = "a"
description = "b"
Tomlを読み込んだ結果:
{'other': 'aaa', 'articles': [{'title': 'a', 'description': 'b'}, {'title': 'a', 'description': 'b'}]}
または、以下のようにテーブルの配列の後に、明示的に別なセクションを開始することでも続く内容を異なるセクションとして扱うことが出来ます。
[[articles]]
title = "a"
description = "b"
[settings]
format_precondition = "aaa"
Tomlを読み込んだ結果:
{'articles': [{'title': 'a', 'description': 'b'}, {'title': 'a', 'description': 'b'}], 'settings': {'other': 'aaa'}}
Tomlではセクション名を明示的に指定すべき
Tomlで設定する際に、キーと値のペアをセクションを指定せずに記述すると、今回発生したようにセクションの順番によって挙動が変わるという問題が発生します。そのため、明示的にセクションを指定する方法が安全と考えられます。