Hvordan lese og skrive Toml -filer ved hjelp av Python

Hvordan lese og skrive Toml -filer ved hjelp av Python
Toml, forkortelse for "Toms åpenbare minimale språk", er et relativt nytt og populært filformat som fokuserer på minimal semantikk for å skrive konfigurasjonsfiler. Filformatet er opprettet av Tom Preston-Werner, den tidligere administrerende direktøren i Github. Fra og med denne artikkelen ble skrevet, den første utgivelseskandidaten til versjon 1.0.0 er tagget, 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 case-sensitive nøkkelverdipar. Nøkler er på venstre side, mens verdiene vil på høyre side; Disse vilkårene er atskilt på hver side med et lik tegn. Nøkkelverdiparene er identiske med syntaks for variabel erklæring du vil se på de fleste programmeringsspråk. Du kan også definere tabeller og subtabeller (seksjoner og underavsnitt) i firkantede parenteser for å holde nøkkelverdipar organisert for forbedret analyseringslogikk og anvendelse i programmene dine. Verdier kan være av streng, heltall, float, boolean, matrise og tids- og datatyper. Toml tillater bruk av prikksyntaks slik at du kan definere en tabell (seksjon) som “tabell.subtable ”eller en nøkkel som“ nøkkel.identifikator, ”også. Filforlengelsen som brukes til en Toml -fil er .Toml. Nedenfor er et forkortet eksempel på en TOML -fil:

name = "PC Game"
[misligholde]
profil_name = "Profil"
Player_name = "Player"
PROFIL_CREATED = 1979-05-27T07: 32: 00-08: 00
lyd = sant
[bruker]
[bruker.profil]
Navn = "Profil1"
Player_name = "Player1"
klasse = "kriger"
[bruker.Innstillinger]
lyd = falsk
[standard_inventory]
Warrior = [["Sword", "Shield"], ["Plate Armour", "Plate Helm"]]
mage = [["Staff", "stav"], ["kappe", "hette"]]
elementer = [
"Helseskjold",
"Motgift",
"Mana Potion"
]

For referanse er den samme konfigurasjonsfilen skrevet i JSON nedenfor:


"Navn": "PC -spill",
"standard":
"Profil_navn": "Profil",
"Player_name": "Player",
"Profil_Created": "1979-05-27T15: 32: 00.000z ",
"lyd": sant
,
"Bruker":
"Profil":
"Navn": "Profil1",
"Player_name": "Player1",
"Klasse": "Warrior"
,
"Innstillinger":
"lyd": falsk

,
"standard_inventory":
"kriger": [
[
"sverd",
"skjold"
],
[
"Plate rustning",
"Plate ror"
]
],
"trollmann": [
[
"personale",
"tryllestav"
],
[
"kappe",
"hette"
]
],
"Elementer": [
"Helseskjold",
"Motgift",
"Mana Potion"
]

Forskjeller mellom JSON og INI filformater

Toml ligner på JSON og INI -formater på mange måter, med noen få forskjeller som kan bestemme hvilket filformat du vil bruke. Toml -filformatet legger vekt på 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). Lange nestede data i en JSON -fil kan skrives i Toml på bare noen få linjer.

Imidlertid kan det være forvirrende å identifisere struktur i lange nestede hierarkier i Toml, mens strukturen i JSON er mye tydeligere, selv om de nestede dataene kan virke ordentlig. TOML er først og fremst designet for konfigurasjonsfiler og ikke for store strukturerte datasett, mens JSON er egnet for en hvilken som helst skala av strukturerte data.

Python Toml -modulen

Python Standard Libraries har foreløpig ingen støtte for analysering av TOML -data, i skrivende stund denne artikkelen. Dette kan endres etter Toml versjon 1.0.0 er utgitt. Foreløpig må du bruke en tredjeparts python -modul som heter Toml. Du kan installere denne modulen i Ubuntu ved å bruke en av kommandoene nedenfor:

$ sudo apt install python3-toml
$ pip3 installer toml

Analysere en Toml -fil ved hjelp av Python Toml -modul

Å analysere en Toml-fil ved hjelp av Python3-Toml-modulen er ganske grei. Du kan enten bruke “toml.Last inn "-metoden for å analysere hele filen, eller du kan bruke“ toml.Laster "metode for å analysere enhver spesifikk Toml-formatert nøkkelverdipar. Forutsatt en "data.Toml ”-filen inneholder Toml -formaterte strenger som er nevnt i eksemplet over, koden nedenfor vil analysere og skrive ut Toml -data som en Python -ordbok:

#!/usr/bin/env python3
Importer Toml
Trykk (Toml.Last ("Data.toml "))

Å kjøre koden over vil produsere følgende utgang:

'name': 'pc game', 'standard': 'profil_name': 'profil', 'player_name': 'player',
'PROFIL_CREATED': DATETIME.DateTime (1979, 5, 27, 7, 32, tzinfo =objekt på 0x7f3506b3d850>), 'lyd': true, 'bruker': 'profil': 'name': 'profil1',
'Player_name': 'Player1', 'Class': 'Warrior', 'Innstillinger': 'lyd': falsk,
'Default_inventory': 'Warrior': [['Sword', 'Shield'], ['Plate Armour', 'Plate Helm']],
'Mage': [['Staff', 'Wand'], ['Robe', 'Hood']], 'Items': ['Health Potion', 'Motidote',
'mana potion']

Nå som du har et Python Dictionary -objekt, kan du implementere hvilken som helst logikk i programmet ditt for å håndtere ordboksdataene.

Dumping av en Python -ordbok som Toml formaterte data

En Python -ordbok kan dumpes i Toml -formaterte strenger ved hjelp av “Toml.Dumps ”-metode, eller objektet kan dumpes i en fil ved hjelp av“ TOML.Dump ”-metode. Eksemplet nedenfor vil konvertere et ordbokobjekt Nito Toml formaterte strenger:

#!/usr/bin/env python3
Importer Toml
data = toml.Last ("Data.toml ")
Trykk (Toml.Dumps (data))

Å kjøre ovennevnte kode vil produsere følgende utgang:

name = "PC Game"
[misligholde]
profil_name = "Profil"
Player_name = "Player"
PROFIL_CREATED = 1979-05-27T07: 32: 00-08: 00
lyd = sant
[standard_inventory]
Warrior = [["Sword", "Shield",], ["Plate Armour", "Plate Helm",],]
mage = [["Staff", "stav",], ["kappe", "hette",],]
elementer = ["Health Potion", "Motgift", "Mana Potion",]
[bruker.profil]
Navn = "Profil1"
Player_name = "Player1"
klasse = "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) ”metode.

Konklusjon

En TOML -fil på enklere termer er bare en INI -konfigurasjonsfil med bedre struktur og syntaks, noe som letter enklere analysering og bedre lesbarhet. TOML -filformatet blir ofte sammenlignet med JSON -filformatet, men bortsett fra bruken i konfigurasjonsfiler, har Toml ikke mye verktøy. JSON er derimot mye mer allsidig og kan brukes i forskjellige brukssaker som krever noen datastrukturtype.