Python

Як читати та писати файли TOML за допомогою Python

Як читати та писати файли TOML за допомогою Python
TOML, скорочення від "Очевидна мінімальна мова Тома", - це відносно новий і популярний формат файлів, який зосереджується на мінімальній семантиці для написання конфігураційних файлів. Формат файлу створив Том Престон-Вернер, колишній генеральний директор GitHub. На момент написання цієї статті, кандидат на перший випуск версії 1.0.0 позначено тегами, тому специфікація більш-менш доопрацьована. У цій статті буде короткий вступ до формату файлу TOML та описано, як цей формат файлу можна використовувати у програмах та сценаріях Python.

Приклад файлу конфігурації 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 =об'єкт у 0x7f3506b3d850>), 'sound': True, 'user': 'profile': 'name': 'profile1',
'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 набагато універсальніший і може використовуватися в різних випадках використання, що вимагають будь-якого типу структури даних.

Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...
OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...