Jak czytać i pisać pliki toml za pomocą Pythona

Jak czytać i pisać pliki toml za pomocą Pythona
Toml, skrót od „oczywistego minimalnego języka Toma”, to stosunkowo nowy i popularny format plików, który koncentruje się na minimalnej semantyce do pisania plików konfiguracyjnych. Format pliku został stworzony przez Toma Prestona-Wernera, byłego dyrektora generalnego GitHub. W chwili pisania tego artykułu został napisany pierwszy kandydat do wersji 1.0.0 został oznaczony, więc specyfikacja jest mniej lub bardziej sfinalizowana. W tym artykule zawiera krótkie wprowadzenie do formatu pliku TOML i opisuje, w jaki sposób ten format pliku można użyć w aplikacjach i skryptach Python.

Przykład pliku konfiguracji TOML

Specyfikacja dla TOML obejmuje użycie wrażliwych na przypadki par kluczów kluczowych. Klucze są po lewej stronie, a wartości po prawej stronie; te terminy są oddzielone po obu stronach znakiem równości. Pary wartości kluczowej są identyczne z składnią do deklaracji zmiennej, którą zobaczysz w większości języków programowania. Możesz także zdefiniować tabele i pod wpisy (sekcje i podsekcje) w nawiasach kwadratowych, aby utrzymać pary kluczowe w celu ulepszenia logiki i aplikacji w programach. Wartości mogą być z łańcucha, liczb całkowitych, pływaków, boolean, tablicy oraz typy daty i daty. TOML umożliwia użycie składni DOT, aby można było zdefiniować tabelę (sekcję) jako „Tabela.subtelne ”lub klucz jako„ klucz.identyfikator ”też. Rozszerzenie pliku używane dla pliku TOML jest .toml. Poniżej znajduje się skrócony przykład pliku TOML:

name = "PC Game"
[domyślny]
PROFIL_NAME = "PROFIL"
Player_name = "Player"
Profile_Created = 1979-05-27T07: 32: 00-08: 00
dźwięk = prawda
[użytkownik]
[użytkownik.profil]
name = "profilu1"
gracz_name = "Player1"
class = "Warrior"
[użytkownik.Ustawienia]
dźwięk = fałszywy
[default_inventory]
Warrior = [[„miecz”, „tarcza”], [„tabrorz płyt”, „helm płyt”]]
Mage = [[„Staff”, „Wand”], [„szata”, „hood”]]
pozycje = [
"mikstura zdrowia",
"antidotum",
„Eliksja many”
]

Dla odniesienia ten sam plik konfiguracyjny jest zapisany w JSON poniżej:


„Nazwa”: „gra na PC”,
"domyślny":
„Profile_name”: „Profil”,
„Player_name”: „Player”,
„Profile_created”: „1979-05-27T15: 32: 00.000Z ",
„Dźwięk”: prawda
,
„Użytkownik”:
„Profil”:
„Nazwa”: „profilu1”,
„Player_name”: „Player1”,
„klasa”: „wojownik”
,
„Ustawienia”:
„Dźwięk”: Fałsz

,
„Default_inventory”:
„Wojownik”: [
[[[
"miecz",
"tarcza"
],
[[[
„Pancerz płyty”,
„Helm płyt”
]
],
„Mag”: [
[[[
"personel",
"różdżka"
],
[[[
"szata",
"kaptur"
]
],
"rzeczy": [
"mikstura zdrowia",
"antidotum",
„Eliksja many”
]

Różnice między formatami plików JSON i INI

TOML jest podobny do formatów JSON i INI na wiele sposobów, z kilkoma różnicami, które mogą określić format pliku, którego będziesz chciał użyć. Format pliku TOML podkreśla ludzką czytelność i wydaje się znacznie czystszy. Pliki INI nie obsługują zagnieżdżonych sekcji i zagnieżdżonych par kluczy. W przeciwieństwie do JSON, Toml zezwala na komentarze (z symbolem #). Długo zagnieżdżone dane w pliku JSON można zapisać w TOML w zaledwie kilku wierszach.

Jednak prawidłowa identyfikacja struktury w długich zagnieżdżonych hierarchiach w TOML może być myląca, podczas gdy w JSON struktura jest znacznie wyraźniejsza, mimo że zagnieżdżone dane mogą wydawać się zawodowe. TOML jest zaprojektowany przede wszystkim do plików konfiguracyjnych, a nie do dużych ustrukturyzowanych zestawów danych, podczas gdy JSON jest odpowiedni dla dowolnej skali danych strukturalnych.

Moduł Python Toml

Standardowe biblioteki Python nie mają obecnie żadnego wsparcia dla analizowania danych TOML, w momencie pisania tego artykułu. Może się to zmienić po wersji 1 TOML.0.0 zostaje wydany. Na razie będziesz musiał użyć modułu Python trzeciej o nazwie Toml. Możesz zainstalować ten moduł w Ubuntu za pomocą jednego z poniższych poleceń:

$ sudo apt instal Python3-Toml
$ pip3 instaluj toml

Parsowanie pliku TOML za pomocą modułu Python Toml

Parsowanie pliku TOML za pomocą modułu Python3-Toml jest dość proste. Możesz albo użyć „toml.Załaduj metodę do analizowania całego pliku lub możesz użyć „TOML.Ładuje ”metodę analizowania dowolnej konkretnej pary sformatowanej do sformatowanej wartości TOML. Zakładając „dane.Plik TOML ”zawiera sformatowane struny TOML wymienione w powyższym przykładzie, poniższy kod parsuje i wydrukuje dane TOML jako słownik Python:

#!/usr/bin/env python3
Import Toml
Drukuj (toml.załaduj („Dane.toml "))

Uruchomienie powyższego kodu wytworzy następujące dane wyjściowe:

„Nazwa”: „PC Game”, „Domyślna”: 'Profilu_name': 'profilu', 'nazwa_taczka': 'Player' ',
„profilu_created”: DateTime.DateTime (1979, 5, 27, 7, 32, tzinfo =Obiekt przy 0x7f3506b3d850>), „dźwięk”: true, „użytkownik”: 'profilu': 'name': 'profilu1' ',
„Player_name”: „Player1”, „klasa”: „Warrior”, „Ustawienia”: „dźwięk”: false,
„Default_inventory”: „Warrior”: [[„miecz”, „tarcza”], [„plaster zbroi”, „helm płyt”]]]]],
„Mag”: [„personel”, „różdżka”], [„szata”, „hood”]], „przedmioty”: [„mikstura zdrowia”, „antidotum”,
„Mana Mikstion”]

Teraz, gdy masz obiekt słownika Pythona, możesz zaimplementować dowolną logikę w swoim programie do obsługi danych słownika.

Zrzucanie słownika Pythona jako danych sformatowanych przez TOML

Słownik Python można zrzucić do sformatowanych strun Toml za pomocą „toml.Metoda zrzutów ”lub obiekt można zrzucić do pliku za pomocą„ TOML.Metoda zrzutu ”. Poniższy przykład przekonwertuje obiekt słownika Nito Toml Sformatowane struny:

#!/usr/bin/env python3
Import Toml
Data = Toml.załaduj („Dane.toml ”)
Drukuj (toml.Zrzuty (dane))

Uruchomienie powyższego kodu wytworzy następujące dane wyjściowe:

name = "PC Game"
[domyślny]
PROFIL_NAME = "PROFIL"
Player_name = "Player"
Profile_Created = 1979-05-27T07: 32: 00-08: 00
dźwięk = prawda
[default_inventory]
Warrior = [[„miecz”, „tarcza”,], [„tabrorz płyt”, „helm płyt”,],]
Mage = [[„Staff”, „Wand”,], [„szata”, „hood”,],]
Pozycje = [„Eikstura zdrowia”, „antidotum”, „Mana Eliksja”,]
[użytkownik.profil]
name = "profilu1"
gracz_name = "Player1"
class = "Warrior"
[użytkownik.Ustawienia]
dźwięk = fałszywy

Aby przekonwertować obiekt słownika na ciąg sformatowany przez TOML i przechowywać go w pliku, możesz użyć „TOML.Metoda zrzutu (Dictionary_Object, Output_file) ”.

Wniosek

Plik TOML w prostszych warunkach to tylko plik konfiguracyjny INI z lepszą strukturą i składnią, ułatwiając łatwiejsze analizowanie i lepszą czytelność. Format pliku TOML jest często porównywany z formatem plików JSON, ale oprócz jego użycia w plikach konfiguracyjnych, TOML nie ma wiele użyteczności. Z drugiej strony JSON jest znacznie bardziej wszechstronny i może być używany w różnych przypadkach użycia wymagającego dowolnego typu struktury danych.