Pyton

Jak czytać i zapisywać pliki TOML za pomocą Pythona?

Jak czytać i zapisywać pliki TOML za pomocą Pythona?
TOML, skrót od „Tom's Obvious Minimal Language”, to stosunkowo nowy i popularny format plików, który koncentruje się na minimalnej semantyce do zapisywania plików konfiguracyjnych. Format pliku został stworzony przez Toma Prestona-Wernera, byłego dyrektora generalnego GitHub. W momencie pisania tego artykułu pierwszy kandydat do wydania wersji 1.0.0 zostało oznaczone, więc specyfikacja jest mniej więcej sfinalizowana. Ten artykuł zawiera krótkie wprowadzenie do formatu pliku TOML i opisuje, w jaki sposób ten format pliku może być używany w aplikacjach i skryptach Pythona.

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 python3
importuj 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=obiekt pod adresem 0x7f3506b3d850>), 'dźwięk': True, 'user': 'profile': 'name': 'profile1',
'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 python3
importuj 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.

Gry SuperTuxKart for Linux
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...
Gry Battle for Wesnoth Tutorial
Battle for Wesnoth Tutorial
The Battle for Wesnoth is one of the most popular open source strategy games that you can play at this time. Not only has this game been in developmen...
Gry 0 A.D. Tutorial
0 A.D. Tutorial
Out of the many strategy games out there, 0 A.D. manages to stand out as a comprehensive title and a very deep, tactical game despite being open sourc...