Pytonorm

Hur man läser och skriver TOML-filer med Python

Hur man läser och skriver TOML-filer med Python
TOML, förkortning för "Tom's Obvious Minimal Language", är ett relativt nytt och populärt filformat som fokuserar på minimal semantik för att skriva konfigurationsfiler. Filformatet har skapats av Tom Preston-Werner, tidigare VD för GitHub. När den här artikeln skrevs var den första släppkandidaten i version 1.0.0 har taggats, så specifikationen är mer eller mindre slutförd. Den här artikeln ger en kort introduktion till TOML-filformatet och beskriver hur detta filformat kan användas i Python-applikationer och skript.

Exempel på TOML-konfigurationsfil

Specifikationen för TOML inkluderar användning av skiftlägeskänsliga nyckel-värdepar. Nycklarna finns på vänster sida, medan värdena kommer till höger; dessa termer är åtskilda på vardera sidan av ett likhetstecken. Nyckel-värde-paren är identiska med den variabla deklarationssyntaxen som du ser på de flesta programmeringsspråk. Du kan också definiera tabeller och subtabeller (avsnitt och underavsnitt) inom hakparenteser för att hålla nyckel-värdepar ordnade för förbättrad analyslogik och tillämpning i dina program. Värden kan vara av sträng-, heltal-, float-, boolean-, array- och tid- och datumtyper. TOML tillåter användning av punkt-syntax så att du kan definiera en tabell (avsnitt) som “tabell.subtabell ”eller en tangent som“ tangent.identifierare ”också. Filändelsen som används för en TOML-fil är .toml. Nedan följer ett förkortat exempel på en TOML-fil:

name = "PC-spel"
[standard]
profile_name = "Profil"
player_name = "Player"
profile_created = 1979-05-27T07: 32: 00-08: 00
ljud = sant
[användare]
[användare.profil]
namn = "profil1"
player_name = "player1"
class = "krigare"
[användare.inställningar]
ljud = falskt
[standardinventar]
warrior = [["" svärd "," sköld "], [" plate rustning "," plate helm "]]
mage = [["personal", "trollstav"], ["mantel", "huva"]]
objekt = [
"hälsodryck",
"motgift",
"mana potion"
]

Som referens skrivs samma konfigurationsfil i JSON nedan:


"name": "PC-spel",
"standard":
"profile_name": "Profil",
"player_name": "Player",
"profile_created": "1979-05-27T15: 32: 00.000Z ",
"ljud": sant
,
"användare":
"profil":
"name": "profile1",
"player_name": "player1",
"class": "warrior"
,
"inställningar":
"ljud": falskt

,
"default_inventory":
"krigare": [
[
"svärd",
"skydda"
],
[
"plate rustning",
"plate rodret"
]
],
"magiker": [
[
"personal",
"trollstav"
],
[
"morgonrock",
"huva"
]
],
"objekt": [
"hälsodryck",
"motgift",
"mana potion"
]

Skillnader mellan filformaten JSON och INI

TOML liknar JSON- och INI-format på många sätt, med några skillnader som kan avgöra vilket filformat du vill använda. TOML-filformatet betonar mänsklig läsbarhet och verkar mycket renare att läsa. INI-filer stöder inte kapslade sektioner och kapslade nyckel-värdepar. Till skillnad från JSON tillåter TOML kommentarer (med # -symbolen). Lång kapslade data i en JSON-fil kan skrivas i TOML på bara några rader.

Det kan dock vara förvirrande att korrekt identifiera strukturen i långa kapslade hierarkier i TOML, medan strukturen i JSON är mycket tydligare, även om de kapslade uppgifterna kan verka mycket. TOML är främst utformad för konfigurationsfiler och inte för stora strukturerade datamängder, medan JSON är lämplig för alla skalor av strukturerade data.

Python TOML-modulen

Python-standardbibliotek har för närvarande inget stöd för att analysera TOML-data, när denna artikel skrivs. Detta kan ändras efter TOML version 1.0.0 släpps. För tillfället måste du använda en tredje parts Python-modul som heter toml. Du kan installera den här modulen i Ubuntu med ett av kommandona nedan:

$ sudo apt installera python3-toml
$ pip3 installera toml

Analysera en TOML-fil med hjälp av Python TOML-modulen

Att analysera en TOML-fil med python3-toml-modulen är ganska enkel. Du kan antingen använda “toml.ladda "-metoden för att analysera hela filen, eller så kan du använda" toml.laddar ”-metoden för att analysera ett specifikt TOML-formaterat nyckel-värdepar. Antar en "data.toml ”-filen innehåller de TOML-formaterade strängarna som nämns i exemplet ovan, koden nedan analyserar och skriver ut TOML-data som en pythonordbok:

#!/ usr / bin / env python3
importera toml
skriva ut (toml.ladda data.toml "))

Att köra koden ovan ger följande utdata:

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

Nu när du har ett python-ordbokobjekt kan du implementera vilken logik som helst i ditt program för att hantera ordboksdata.

Dumpa en Python-ordbok som TOML-formaterad data

En python-ordlista kan dumpas i TOML-formaterade strängar med "toml.dumps-metoden, eller objektet kan dumpas i en fil med hjälp av "toml.dump ”-metoden. I exemplet nedan konverteras ett ordbokobjekt nito TOML-formaterade strängar:

#!/ usr / bin / env python3
importera toml
data = toml.ladda data.toml ")
skriva ut (toml.dumpar (data))

Att köra ovanstående kod ger följande utdata:

name = "PC-spel"
[standard]
profile_name = "Profil"
player_name = "Player"
profile_created = 1979-05-27T07: 32: 00-08: 00
ljud = sant

[standardinventar]
warrior = [["" svärd "," sköld ",], [" plate rustning "," plate helm ",],]
mage = [["personal", "trollstav",], ["mantel", "huva",],]
artiklar = ["hälsodryck", "motgift", "manadryck",]

[användare.profil]
namn = "profil1"
player_name = "player1"
class = "krigare"
[användare.inställningar]
ljud = falskt

För att konvertera ett ordbokobjekt till en TOML-formaterad sträng och lagra det i en fil kan du använda “toml.dump (dictionary_object, output_file) ”-metoden.

Slutsats

En TOML-fil i enklare termer är bara en INI-konfigurationsfil med bättre struktur och syntax, vilket underlättar tolkning och bättre läsbarhet. TOML-filformatet jämförs ofta med JSON-filformatet, men förutom dess användning i konfigurationsfiler har TOML inte mycket nytta. JSON, å andra sidan, är mycket mer mångsidigt och kan användas i olika användningsfall som kräver vilken datastruktur som helst.

Mus WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
Om du vill förbättra standardfunktionerna för din muspekare, använd freeware WinMouse. Det lägger till fler funktioner som hjälper dig att få ut det m...
Mus Mus vänsterklicka på knappen fungerar inte på Windows 10
Mus vänsterklicka på knappen fungerar inte på Windows 10
Om du använder en dedikerad mus med din bärbara dator eller stationära dator men musens vänsterklick-knapp fungerar inte på Windows 10/8/7 av någon an...
Mus Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Om du upptäcker att muspekaren hoppar eller rör sig på egen hand, automatiskt, slumpmässigt när du skriver in Windows-bärbar dator eller dator, kan nå...