Python

Hvordan lese og skrive TOML-filer ved hjelp av Python

Hvordan lese og skrive TOML-filer ved hjelp av Python
TOML, forkortelse for "Tom's Obvious Minimal Language", er et relativt nytt og populært filformat som fokuserer på minimal semantikk for å skrive konfigurasjonsfiler. Filformatet er opprettet av Tom Preston-Werner, tidligere administrerende direktør i GitHub. Fra det tidspunktet denne artikkelen ble skrevet, den første utgivelseskandidaten for versjon 1.0.0 er merket, så spesifikasjonen er mer eller mindre ferdig. Denne artikkelen vil gi en kort introduksjon til TOML-filformatet og beskrive hvordan dette filformatet kan brukes i Python-applikasjoner og skript.

TOML-konfigurasjonsfileksempel

Spesifikasjonen for TOML inkluderer bruk av store og små bokstaver. Tastene er på venstre side, mens verdiene vil være på høyre side; disse begrepene er atskilt på hver side av et likhetstegn. Nøkkelverdiparene er identiske med syntaksen for variabel erklæring du vil se på de fleste programmeringsspråk. Du kan også definere tabeller og undertabeller (seksjoner og underavsnitt) i parentes for å holde nøkkelverdiparene organisert for forbedret analyseringslogikk og applikasjon i programmene dine. Verdiene kan være av streng, heltall, flyt, boolsk, matrise og tid og dato. TOML tillater bruk av prikkesyntaks slik at du kan definere en tabell (seksjon) som “tabell.undertabell ”eller en nøkkel som“ nøkkel.identifikator, ”også. Filutvidelsen som brukes til en TOML-fil er .toml. Nedenfor er et forkortet eksempel på en TOML-fil:

name = "PC-spill"
[misligholde]
profile_name = "Profil"
player_name = "Spiller"
profile_created = 1979-05-27T07: 32: 00-08: 00
lyd = sann
[bruker]
[bruker.profil]
name = "profile1"
player_name = "player1"
class = "kriger"
[bruker.innstillinger]
lyd = falsk
[standard_beholdning]
kriger = [["sverd", "skjold"], ["plate rustning", "plate helm"]]
mage = [["staff", "wand"], ["robe", "hood"]]
varer = [
"helsedrikke",
"motgift",
"mana potion"
]

Som referanse er den samme konfigurasjonsfilen skrevet i JSON nedenfor:


"name": "PC-spill",
"standard":
"profile_name": "Profile",
"player_name": "Player",
"profile_created": "1979-05-27T15: 32: 00.000Z ",
"lyd": sant
,
"bruker":
"profil":
"name": "profile1",
"player_name": "player1",
"klasse": "kriger"
,
"innstillinger":
"lyd": falsk

,
"default_inventory":
"kriger": [
[
"sverd",
"skjold"
],
[
"plate rustning",
"plate helm"
]
],
"trollmann": [
[
"personale",
"tryllestav"
],
[
"kappe",
"hette"
]
],
"gjenstander": [
"helsedrikke",
"motgift",
"mana potion"
]

Forskjeller mellom JSON og INI filformater

TOML ligner på mange måter JSON- og INI-formater, med noen få forskjeller som kan bestemme hvilket filformat du vil bruke. TOML-filformatet understreker menneskelig lesbarhet og virker mye renere å lese. INI-filer støtter ikke nestede seksjoner og nestede nøkkelverdipar. I motsetning til JSON tillater TOML kommentarer (med # -symbolet). Lang nestede data i en JSON-fil kan skrives i TOML på bare noen få linjer.

Det kan imidlertid være forvirrende å identifisere struktur riktig i lange nestede hierarkier i TOML, mens strukturen i JSON er mye tydeligere, selv om de nestede dataene kan virke utførlige. TOML er primært designet for konfigurasjonsfiler og ikke for store strukturerte datasett, mens JSON er egnet for alle skalaer av strukturerte data.

Python TOML-modulen

Python-standardbiblioteker har foreløpig ingen støtte for parsing av TOML-data, når denne artikkelen skrives. Dette kan endres etter TOML versjon 1.0.0 er utgitt. Foreløpig må du bruke en tredjeparts Python-modul kalt toml. Du kan installere denne modulen i Ubuntu ved å bruke en av kommandoene nedenfor:

$ sudo apt installere python3-toml
$ pip3 installer toml

Analyse av en TOML-fil ved hjelp av Python TOML-modulen

Å analysere en TOML-fil ved hjelp av python3-toml-modulen er ganske grei. Du kan enten bruke “toml.last "-metoden for å analysere hele filen, eller du kan bruke" toml.laster ”-metoden for å analysere et spesifikt TOML-formatert nøkkelverdipar. Forutsatt at “data.toml ”-filen inneholder de TOML-formaterte strengene som er nevnt i eksemplet ovenfor, koden nedenfor vil analysere og skrive ut TOML-data som en pythonordbok:

#!/ usr / bin / env python3
import toml
trykk (toml.last ("data.toml "))

Å kjøre koden ovenfor gir følgende utdata:

'name': 'PC Game', 'default': 'profile_name': 'Profile', 'player_name': 'Player',
'profile_created': datetime.datetime (1979, 5, 27, 7, 32, tzinfo =objekt ved 0x7f3506b3d850>), 'sound': True, 'user': 'profile': 'name': 'profile1',
'player_name': 'player1', 'class': 'warrior', 'settings': 'sound': False,
'default_inventory': 'warrior': [['Sverd', 'skjold'], ['plate rustning', 'plate helm']],
'mage': [['staff', 'wand'], ['robe', 'hood']], 'items': ['health potion', 'motgift',
'mana potion']

Nå som du har et pythonordbokobjekt, kan du implementere hvilken som helst logikk i programmet ditt for å håndtere ordbokdataene.

Dumping a Python Dictionary as TOML Formatted Data

En pythonordbok kan dumpes i TOML-formaterte strenger ved hjelp av “toml.dumps-metoden, eller objektet kan dumpes i en fil ved hjelp av "toml.dump ”-metoden. Eksemplet nedenfor vil konvertere et ordbokobjekt nito TOML-formaterte strenger:

#!/ usr / bin / env python3
import toml
data = toml.last ("data.toml ")
trykk (toml.dumper (data)

Å kjøre ovennevnte kode vil gi følgende utdata:

name = "PC-spill"
[misligholde]
profile_name = "Profil"
player_name = "Spiller"
profile_created = 1979-05-27T07: 32: 00-08: 00
lyd = sann

[standard_beholdning]
kriger = [["sverd", "skjold",], ["plate rustning", "plate helm",],]
mage = [["stab", "tryllestav",], ["kappe", "hette",],]
items = ["health potion", "motgift", "mana potion",]

[bruker.profil]
name = "profile1"
player_name = "player1"
class = "kriger"
[bruker.innstillinger]
lyd = falsk

For å konvertere et ordbokobjekt til en TOML-formatert streng og lagre det i en fil, kan du bruke “toml.dump (dictionary_object, output_file) ”-metoden.

Konklusjon

En TOML-fil i enklere termer er bare en INI-konfigurasjonsfil med bedre struktur og syntaks, noe som letter enklere parsing og bedre lesbarhet. TOML-filformatet sammenlignes ofte med JSON-filformatet, men bortsett fra dets bruk i konfigurasjonsfiler, har ikke TOML mye bruk. JSON er derimot mye mer allsidig og kan brukes i forskjellige brukstilfeller som krever hvilken som helst datastruktur.

5 beste arkadespill for Linux
I dag er datamaskiner seriøse maskiner som brukes til spill. Hvis du ikke kan få den nye høye poengsummen, vil du vite hva jeg mener. I dette innlegge...
Kamp for Wesnoth 1.1. 3.6 Utvikling utgitt
Kamp for Wesnoth 1.1. 3.6 utgitt i forrige måned, er den sjette utgivelsen i 1.1. 3.x-serien, og den leverer en rekke forbedringer, spesielt til bruke...
Slik installerer du League Of Legends på Ubuntu 14.04
Hvis du er fan av League of Legends, er dette en mulighet for deg å prøvekjør League of Legends. Merk at LOL støttes på PlayOnLinux hvis du er en linu...