Python

Sådan læses og skrives TOML-filer ved hjælp af Python

Sådan læses og skrives TOML-filer ved hjælp af Python
TOML, forkortelse for "Tom's Obvious Minimal Language", er et relativt nyt og populært filformat, der fokuserer på minimal semantik til skrivning af konfigurationsfiler. Filformatet er oprettet af Tom Preston-Werner, den tidligere administrerende direktør for GitHub. Fra det tidspunkt, hvor denne artikel blev skrevet, var den første frigivelseskandidat til version 1.0.0 er blevet tagget, så specifikationen er mere eller mindre færdig. Denne artikel giver en kort introduktion til TOML-filformatet og beskriver, hvordan dette filformat kan bruges i Python-applikationer og scripts.

Eksempel på TOML-konfigurationsfil

Specifikationen for TOML inkluderer brug af store og små bogstaver, der er følsomme over for store og små nøgler. Tasterne er på venstre side, mens værdierne på højre side er; disse udtryk er adskilt på begge sider af et ligetegn. Nøgleværdiparene er identiske med den syntaks for variabel erklæring, du vil se på de fleste programmeringssprog. Du kan også definere tabeller og undertabeller (sektioner og underafsnit) i firkantede parenteser for at holde nøgleværdipar organiseret til forbedret parsinglogik og anvendelse i dine programmer. Værdier kan være af streng-, heltal-, float-, boolean-, array- og tid- og datotyper. TOML tillader brug af prikkesyntaks, så du kan definere en tabel (sektion) som “tabel.undertabel "eller en nøgle som" nøgle.identifikator ”også. Filudvidelsen, der bruges til en TOML-fil, er .toml. Nedenfor er et forkortet eksempel på en TOML-fil:

name = "PC-spil"
[Standard]
profile_name = "Profil"
player_name = "Spiller"
profile_created = 1979-05-27T07: 32: 00-08: 00
lyd = sandt
[bruger]
[bruger.profil]
navn = "profil1"
player_name = "player1"
class = "kriger"
[bruger.indstillinger]
lyd = falsk
[standard_beholdning]
kriger = [["sværd", "skjold"], ["plade rustning", "plade ror"]]
mage = [["personale", "tryllestav"], ["kappe", "hætte"]]
varer = [
"sundhedsdrink",
"modgift",
"mana potion"
]

Til reference er den samme konfigurationsfil skrevet i JSON nedenfor:


"name": "PC-spil",
"Standard":
"profile_name": "Profil",
"player_name": "Player",
"profile_created": "1979-05-27T15: 32: 00.000Z ",
"lyd": sandt
,
"bruger":
"profil":
"name": "profile1",
"player_name": "player1",
"klasse": "kriger"
,
"indstillinger":
"lyd": falsk

,
"standard_inventory":
"kriger": [
[
"sværd",
"skjold"
],
[
"plade rustning",
"plade ror"
]
],
"magiker": [
[
"personale",
"tryllestav"
],
[
"kappe",
"hætte"
]
],
"emner": [
"sundhedsdrink",
"modgift",
"mana potion"
]

Forskelle mellem filformaterne JSON og INI

TOML ligner JSON- og INI-formater på mange måder med nogle få forskelle, der kan bestemme, hvilket filformat du vil bruge. TOML-filformatet understreger menneskelig læsbarhed og synes meget renere at læse. INI-filer understøtter ikke indlejrede sektioner og indlejrede nøgleværdipar. I modsætning til JSON tillader TOML kommentarer (med symbolet #). Lange indlejrede data i en JSON-fil kan skrives i TOML på blot nogle få linjer.

Det kan dog være forvirrende at korrekt identificere struktur i lange indlejrede hierarkier i TOML, mens strukturen i JSON er meget klarere, selvom de indlejrede data kan virke detaljerede. TOML er primært designet til konfigurationsfiler og ikke til store strukturerede datasæt, mens JSON er egnet til enhver skala af strukturerede data.

Python TOML-modulet

Python-standardbiblioteker har i øjeblikket ingen understøttelse til parsing af TOML-data på tidspunktet for skrivningen af ​​denne artikel. Dette kan ændre sig efter TOML version 1.0.0 frigives. For øjeblikket bliver du nødt til at bruge et tredjeparts Python-modul kaldet toml. Du kan installere dette modul i Ubuntu ved hjælp af en af ​​nedenstående kommandoer:

$ sudo apt installere python3-toml
$ pip3 installer toml

Parsing af en TOML-fil ved hjælp af Python TOML-modul

At analysere en TOML-fil ved hjælp af python3-toml-modulet er ret ligetil. Du kan enten bruge “toml.indlæs-metoden for at analysere hele filen, eller du kan bruge “toml.indlæser ”-metoden til at analysere et specifikt TOML-formateret nøgleværdipar. Antages en "data.toml ”-fil indeholder de TOML-formaterede strenge, der er nævnt i eksemplet ovenfor, koden nedenfor vil analysere og udskrive TOML-data som en pythonordbog:

#!/ usr / bin / env python3
import toml
print (toml.indlæs ("data.toml "))

At køre ovenstående kode vil producere følgende output:

'name': 'PC Game', 'default': 'profile_name': 'Profile', 'player_name': 'Player',
'profile_created': datetime.datetime (1979, 5, 27, 7, 32, tzinfo =objekt ved 0x7f3506b3d850>), 'lyd': Sandt, 'bruger': 'profil': 'navn': 'profil1',
'player_name': 'player1', 'class': 'warrior', 'settings': 'sound': False,
'default_inventory': 'warrior': [['sword', 'shield'], ['plate rustning', 'plate helm']],
'mage': [['staff', 'wand'], ['robe', 'hood']], 'items': ['health potion', 'antidote',
'mana potion']

Nu hvor du har et python-ordbogobjekt, kan du implementere enhver logik i dit program til at håndtere ordbogsdataene.

Dumping af en Python-ordbog som TOML-formaterede data

En python-ordbog kan dumpes i TOML-formaterede strenge ved hjælp af “toml.dumps-metoden, eller objektet kan dumpes i en fil ved hjælp af "toml.dump ”metode. Eksemplet nedenfor konverterer et ordbogobjekt nito TOML-formaterede strenge:

#!/ usr / bin / env python3
import toml
data = toml.indlæs ("data.toml ")
print (toml.lossepladser (data))

Kørsel af ovenstående kode giver følgende output:

name = "PC-spil"
[Standard]
profile_name = "Profil"
player_name = "Spiller"
profile_created = 1979-05-27T07: 32: 00-08: 00
lyd = sandt

[standard_beholdning]
kriger = [["sværd", "skjold",], ["plade rustning", "plade ror",],]
mage = [["personale", "tryllestav",], ["kappe", "hætte",],]
items = ["health potion", "modgift", "mana potion",]

[bruger.profil]
navn = "profil1"
player_name = "player1"
class = "kriger"
[bruger.indstillinger]
lyd = falsk

For at konvertere et ordbogobjekt til en TOML-formateret streng og gemme det i en fil, kan du bruge “toml.dump (dictionary_object, output_file) ”metode.

Konklusion

En TOML-fil i enklere termer er bare en INI-konfigurationsfil med bedre struktur og syntaks, hvilket letter lettere parsing og bedre læsbarhed. TOML-filformatet sammenlignes ofte med JSON-filformatet, men bortset fra dets anvendelse i konfigurationsfiler har TOML ikke meget nytte. JSON er derimod meget mere alsidig og kan bruges i forskellige brugssager, der kræver enhver datastrukturstype.

Mus WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
Hvis du vil forbedre standardfunktionerne for din musemarkør, skal du bruge freeware WinMouse. Det tilføjer flere funktioner, der hjælper dig med at f...
Mus Museklik på venstre museknap fungerer ikke på Windows 10
Museklik på venstre museknap fungerer ikke på Windows 10
Hvis du bruger en dedikeret mus med din bærbare computer eller stationære computer, men musens venstre-klik-knap fungerer ikke på Windows 10/8/7 af en...
Mus Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Hvis du finder ud af, at din musemarkør hopper eller bevæger sig alene, automatisk tilfældigt, mens du skriver Windows-bærbar computer eller computer,...