Приклад файлу конфігурації TOML
Специфікація для TOML включає використання пар ключ-значення з урахуванням регістру. Клавіші розташовані зліва, а значення - з правого боку; ці терміни розділені по обидва боки знаком рівності. Пари ключ-значення ідентичні синтаксису оголошень змінних, який ви побачите в більшості мов програмування. Ви також можете визначити таблиці та підтаблиці (розділи та підрозділи) у квадратних дужках, щоб зберегти пари ключ-значення організованими для поліпшення логіки розбору та застосування у ваших програмах. Значення можуть мати рядок, ціле число, плаваюче, логічне значення, масив, а також типи часу та дати. TOML дозволяє використовувати синтаксис крапок, щоб ви могли визначити таблицю (розділ) як "таблицю.підтаблиця "або ключ як" ключ.ідентифікатор ». Розширення файлу, яке використовується для файлу TOML, є .toml. Нижче наведено скорочений приклад файлу TOML:
name = "Гра для ПК"[за замовчуванням]
profile_name = "Профіль"
player_name = "Гравець"
profile_created = 1979-05-27T07: 32: 00-08: 00
звук = істина
[користувач]
[користувач.профіль]
name = "profile1"
player_name = "player1"
class = "воїн"
[користувач.налаштування]
звук = помилковий
[default_inventory]
воїн = [["меч", "щит"], ["пластинчаста броня", "пластинковий шлем"]]
маг = [["посох", "паличка"], ["халат", "капюшон"]]
пункти = [
"зілля для здоров'я",
"протиотрута",
"зілля мани"
]
Для довідки той самий файл конфігурації написаний в JSON нижче:
"name": "Гра для ПК",
"за замовчуванням":
"profile_name": "Профіль",
"player_name": "Гравець",
"profile_created": "1979-05-27T15: 32: 00.000Z ",
"звук": правда
,
"користувач":
"профіль":
"name": "profile1",
"player_name": "player1",
"клас": "воїн"
,
"налаштування":
"звук": помилковий
,
"default_inventory":
"воїн": [
[
"меч",
"щит"
],
[
"пластинчаста броня",
"плита керма"
]
],
"маг": [
[
"персонал",
"паличка"
],
[
"халат",
"капюшон"
]
],
"предмети": [
"зілля для здоров'я",
"протиотрута",
"зілля мани"
]
Відмінності між форматами файлів JSON та INI
TOML багато в чому схожий на формати JSON та INI, з деякими відмінностями, які можуть визначити, який формат файлу ви хочете використовувати. Формат файлу TOML підкреслює зручність читання та видається набагато чистішим для читання. Файли INI не підтримують вкладені розділи та вкладені пари ключ-значення. На відміну від JSON, TOML дозволяє коментарі (із символом #). Довго вкладені дані у файл JSON можна записати у TOML всього за кілька рядків.
Однак може бути заплутаним належним чином ідентифікувати структуру в довгих вкладених ієрархіях в TOML, тоді як у JSON структура набагато чіткіша, хоча вкладені дані можуть виглядати багатослівно. TOML в основному розроблений для файлів конфігурації, а не для великих наборів структурованих даних, тоді як JSON підходить для будь-якого масштабу структурованих даних.
Модуль Python TOML
На момент написання цієї статті стандартні бібліотеки Python не підтримують аналіз даних TOML. Це може змінитися після версії TOML 1.0.0 випущено. На даний момент вам доведеться використовувати сторонній модуль Python, який називається toml. Ви можете встановити цей модуль в Ubuntu, використовуючи одну з команд нижче:
$ sudo apt встановити python3-toml$ pip3 встановити toml
Розбір файлу TOML за допомогою модуля Python TOML
Розбір файлу TOML за допомогою модуля python3-toml досить простий. Ви можете використовувати “toml.load », щоб проаналізувати весь файл, або ви можете використовувати« toml.завантажує ”, щоб проаналізувати будь-яку конкретну пару ключ-значення у форматі TOML. Припускаючи „дані.toml ”містить файл, відформатований у TOML, згаданий у прикладі вище, код нижче буде аналізувати та друкувати дані TOML як словник python:
#!/ usr / bin / env python3імпорт toml
друк (томл.завантажити ("дані.toml "))
Запуск наведеного вище коду дасть такий результат:
'name': 'PC Game', 'default': 'profile_name': 'Profile', 'player_name': 'Player','profile_created': дата-час.datetime (1979, 5, 27, 7, 32, tzinfo =
'player_name': 'player1', 'class': 'warrior', 'settings': 'sound': False,
'default_inventory': 'warrior': [['меч', 'shield'], ['plate plate', 'plate helm']],
'маг': [['посох', 'паличка'], ['халат', 'капюшон']], 'предмети': ['зілля для здоров'я', 'протиотрута',
'зілля мани']
Тепер, коли у вас є об’єкт словника python, ви можете реалізувати будь-яку логіку у своїй програмі для обробки даних словника.
Скидання словника Python як даних у форматі TOML
Словник python можна скинути у рядки, відформатовані TOML, використовуючи “toml.дампів ”, або об’єкт можна скинути у файл за допомогою“ toml.дамп ”метод. Наведений нижче приклад перетворить об'єкт словника у форматі nito TOML у форматованих рядках:
#!/ usr / bin / env python3імпорт toml
дані = toml.завантажити ("дані.toml ")
друк (томл.звалища (дані))
Запуск наведеного вище коду дасть такий результат:
name = "Гра для ПК"[за замовчуванням]
profile_name = "Профіль"
player_name = "Гравець"
profile_created = 1979-05-27T07: 32: 00-08: 00
звук = істина
[default_inventory]
воїн = [["меч", "щит",], ["пластинчаста броня", "платівковий кермо",],]
маг = [["посох", "паличка",], ["халат", "капюшон",],]
items = ["зілля для здоров'я", "протиотрута", "зілля для мани",]
[користувач.профіль]
name = "profile1"
player_name = "player1"
class = "воїн"
[користувач.налаштування]
звук = помилковий
Щоб перетворити об’єкт словника у відформатований TOML рядок і зберегти його у файлі, ви можете використовувати “toml.дамп (об'єкт_словника, файл_виводу) ”.
Висновок
Простіше кажучи, файл TOML - це просто файл конфігурації INI з кращою структурою та синтаксисом, що полегшує синтаксичний аналіз та кращу читабельність. Формат файлу TOML часто порівнюють з форматом файлу JSON, але крім використання його у конфігураційних файлах, TOML не має великої корисності. З іншого боку, JSON набагато універсальніший і може використовуватися в різних випадках використання, що вимагають будь-якого типу структури даних.