Przykład pliku konfiguracyjnego TOML
Specyfikacja TOML obejmuje użycie par klucz-wartość z rozróżnianiem wielkości liter. Klawisze znajdują się po lewej stronie, a wartości po prawej stronie; terminy te są oddzielone po obu stronach znakiem równości. Pary klucz-wartość są identyczne ze składnią deklaracji zmiennych, którą zobaczysz w większości języków programowania. Możesz również zdefiniować tabele i podtabele (sekcje i podsekcje) w nawiasach kwadratowych, aby uporządkować pary klucz-wartość w celu poprawy logiki analizowania i aplikacji w twoich programach. Wartości mogą być typu string, integer, float, boolean, array oraz time and date. TOML pozwala na użycie składni z kropką, dzięki czemu można zdefiniować tabelę (sekcję) jako „tabela.podtablica” lub klawisz jako „klucz.identyfikator”, jak również. Rozszerzenie pliku używane dla pliku TOML to .Toml. Poniżej znajduje się skrócony przykład pliku TOML:
nazwa = "Gra na PC"[domyślna]
nazwa_profilu = "Profil"
nazwa_gracza = "Gracz"
profil_utworzony = 1979-05-27T07:32:00-08:00
dźwięk = prawda
[użytkownik]
[użytkownik.profil]
nazwa = "profil1"
nazwa_gracza = "gracz1"
klasa = "wojownik"
[użytkownik.ustawienia]
dźwięk = fałsz
[domyślny_inwentarz]
wojownik = [ ["miecz", "tarcza"], ["zbroja płytowa", "hełm płytowy"] ]
mag = [["laska", "różdżka"], ["szata", "kaptur"]]
przedmioty = [
"mikstura zdrowia",
"antidotum",
"mikstura many"
]
Dla porównania, ten sam plik konfiguracyjny jest napisany w JSON poniżej:
"name": "Gra na PC",
"domyślna":
"profile_name": "Profil",
"player_name": "Gracz",
"profile_created": "1979-05-27T15:32:00.000Z",
"dźwięk": prawda
,
"użytkownik":
"profil":
"nazwa": "profil1",
"player_name": "gracz1",
"klasa": "wojownik"
,
"ustawienia":
"dźwięk": fałszywy
,
"default_inventory":
"wojownik": [
[
"miecz",
"tarcza"
],
[
„zbroja płytowa”,
„płytowy hełm”
]
],
"mag": [
[
"personel",
"różdżka"
],
[
"szata",
"kaptur"
]
],
"przedmiotów": [
"mikstura zdrowia",
"antidotum",
"mikstura many"
]
Różnice między formatami plików JSON i INI
TOML jest pod wieloma względami podobny do formatów JSON i INI, z kilkoma różnicami, które mogą określić, jakiego formatu pliku chcesz użyć. Format pliku TOML podkreśla czytelność dla człowieka i wydaje się znacznie czystszy do odczytania. Pliki INI nie obsługują zagnieżdżonych sekcji i zagnieżdżonych par klucz-wartość. W przeciwieństwie do JSON, TOML umożliwia komentarze (z symbolem #). Długie dane zagnieżdżone w pliku JSON można zapisać w TOML w zaledwie kilku wierszach.
Jednak prawidłowe zidentyfikowanie struktury w długich zagnieżdżonych hierarchiach w TOML może być mylące, podczas gdy w JSON struktura jest znacznie bardziej przejrzysta, nawet jeśli zagnieżdżone dane mogą wydawać się pełne. TOML jest przeznaczony głównie do plików konfiguracyjnych, a nie do dużych zbiorów danych strukturalnych, podczas gdy JSON jest odpowiedni dla dowolnej skali danych strukturalnych.
Moduł Pythona TOML
W chwili pisania tego artykułu standardowe biblioteki Pythona nie mają obecnie żadnej obsługi parsowania danych TOML. Może się to zmienić po wersji TOML 1.0.0 jest zwolniony. Na razie będziesz musiał użyć zewnętrznego modułu Pythona o nazwie Toml. Możesz zainstalować ten moduł w Ubuntu za pomocą jednego z poniższych poleceń:
$ sudo apt install python3-toml$ pip3 zainstaluj toml
Parsowanie pliku TOML za pomocą modułu Python TOML
Parsowanie pliku TOML za pomocą modułu python3-toml jest dość proste. Możesz użyć „toml.load”, aby przeanalizować cały plik, lub możesz użyć „toml.ładuje”, aby przeanalizować określoną parę klucz-wartość w formacie TOML. Zakładając „dane.toml” zawiera sformatowane ciągi TOML wymienione w powyższym przykładzie, poniższy kod przeanalizuje i wydrukuje dane TOML jako słownik Pythona:
#!/usr/bin/env python3importuj toml
drukuj (toml.load("dane.toml"))
Uruchomienie powyższego kodu da następujące dane wyjściowe:
'name': 'Gra PC', 'default': 'profile_name': 'Profil', 'player_name': 'Gracz','profile_created': data i godzina.data i godzina(1979, 5, 27, 7, 32, tzinfo=
'player_name': 'player1', 'class': 'warrior', 'settings': 'sound': False,
'default_inventory': 'wojownik': [['miecz', 'tarcza'], ['zbroja płytowa', 'hełm płytowy']],
'mag': [['laska', 'różdżka'], ['szata', 'kaptur']], 'przedmioty': ['eliksir zdrowia', 'antidotum',
'mikstura many']
Teraz, gdy masz obiekt słownika Pythona, możesz zaimplementować dowolną logikę w swoim programie, aby obsłużyć dane słownika.
Zrzucanie słownika Pythona jako danych w formacie TOML
Słownik Pythona można zrzucić do ciągów sformatowanych w formacie TOML za pomocą „toml.dumps” lub obiekt można zrzucić do pliku za pomocą “toml.zrzucić”. Poniższy przykład skonwertuje obiekt słownikowy w formacie nito TOML:
#!/usr/bin/env python3importuj toml
dane = toml.load("dane.tom")
drukuj (toml.zrzuty(dane))
Uruchomienie powyższego kodu da następujące dane wyjściowe:
nazwa = "Gra na PC"[domyślna]
nazwa_profilu = "Profil"
nazwa_gracza = "Gracz"
profile_created = 1979-05-27T07:32:00-08:00
dźwięk = prawda
[domyślny_inwentarz]
wojownik = [ [ "miecz", "tarcza",], [ "zbroja płytowa", "hełm płytowy",],]
mag = [ [ "laska", "różdżka",], [ "szata", "kaptur",],]
itemy = [ "mikstura zdrowia", "antidotum", "mikstura many",]
[użytkownik.profil]
nazwa = "profil1"
nazwa_gracza = "gracz1"
klasa = "wojownik"
[użytkownik.ustawienia]
dźwięk = fałsz
Aby przekonwertować obiekt słownika na ciąg sformatowany w formacie TOML i zapisać go w pliku, możesz użyć funkcji „toml.dump(dictionary_object, output_file)” metoda.
Wniosek
W uproszczeniu plik TOML to po prostu plik konfiguracyjny INI o lepszej strukturze i składni, co ułatwia parsowanie i lepszą czytelność. Format pliku TOML jest często porównywany z formatem pliku JSON, ale poza jego wykorzystaniem w plikach konfiguracyjnych, TOML nie ma zbyt 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ących dowolnego typu struktury danych.