Python

TOML-bestanden lezen en schrijven met Python

TOML-bestanden lezen en schrijven met Python
TOML, een afkorting voor "Tom's Obvious Minimal Language", is een relatief nieuw en populair bestandsformaat dat zich richt op minimale semantiek voor het schrijven van configuratiebestanden. Het bestandsformaat is gemaakt door Tom Preston-Werner, de voormalige CEO van GitHub. Vanaf het moment dat dit artikel werd geschreven, was de eerste release-kandidaat van versie 1.0.0 is getagd, dus de specificatie is min of meer definitief. Dit artikel geeft een korte introductie tot het TOML-bestandsformaat en beschrijft hoe dit bestandsformaat kan worden gebruikt in Python-toepassingen en -scripts.

Voorbeeld TOML-configuratiebestand

De specificatie voor TOML omvat het gebruik van hoofdlettergevoelige sleutel-waardeparen. Toetsen bevinden zich aan de linkerkant, terwijl waarden aan de rechterkant; deze termen worden aan weerszijden gescheiden door een isgelijkteken. De sleutel-waardeparen zijn identiek aan de variabele declaratiesyntaxis die u in de meeste programmeertalen zult zien. U kunt ook tabellen en subtabellen (secties en subsecties) tussen vierkante haken definiëren om sleutel-waardeparen georganiseerd te houden voor verbeterde parseerlogica en toepassing in uw programma's. Waarden kunnen string, integer, float, boolean, array en tijd- en datumtypes zijn. TOML staat het gebruik van puntsyntaxis toe, zodat u een tabel (sectie) kunt definiëren als "tabel".subtabel" of een sleutel als "sleutel.identifier', ook. De bestandsextensie die wordt gebruikt voor een TOML-bestand is .toml. Hieronder staat een verkort voorbeeld van een TOML-bestand:

naam = "PC-spel"
[standaard]
profile_name = "Profiel"
player_name = "Speler"
profile_created = 1979-05-27T07:32:00-08:00
geluid = waar
[gebruiker]
[gebruiker.profiel]
naam = "profiel1"
player_name = "speler1"
klasse = "krijger"
[gebruiker.instellingen]
geluid = false
[default_inventory]
krijger = [ ["zwaard", "schild"], ["plaatpantser", "plaathelm"]]
mage = [["staf", "staf"], ["mantel", "kap"]]
artikelen = [
"gezondheidsdrankje",
"tegengif",
"mana drankje"
]

Ter referentie: hetzelfde configuratiebestand is hieronder in JSON geschreven:


"naam": "PC-spel",
"standaard":
"profile_name": "Profiel",
"player_name": "Speler",
"profile_created": "1979-05-27T15:32:00.000Z",
"geluid": waar
,
"gebruiker":
"profiel":
"naam": "profiel1",
"player_name": "speler1",
"klasse": "krijger"
,
"instellingen":
"geluid": false

,
"default_inventory":
"krijger": [
[
"zwaard",
"schild"
],
[
"plaatpantser",
"plaat roer"
]
],
"magiër": [
[
"personeel",
"toverstok"
],
[
"gewaad",
"kap"
]
],
"artikelen": [
"gezondheidsdrankje",
"tegengif",
"mana drankje"
]

Verschillen tussen JSON- en INI-bestandsindelingen

TOML lijkt in veel opzichten op JSON- en INI-indelingen, met een paar verschillen die kunnen bepalen welk bestandsformaat u wilt gebruiken. Het TOML-bestandsformaat benadrukt de menselijke leesbaarheid en lijkt veel schoner om te lezen. INI-bestanden ondersteunen geen geneste secties en geneste sleutel-waardeparen. In tegenstelling tot JSON staat TOML opmerkingen toe (met het #-symbool). Lang geneste gegevens in een JSON-bestand kunnen in slechts een paar regels in TOML worden geschreven.

Het kan echter verwarrend zijn om de structuur in lang geneste hiërarchieën in TOML correct te identificeren, terwijl in JSON de structuur veel duidelijker is, ook al lijken de geneste gegevens uitgebreid. TOML is voornamelijk ontworpen voor configuratiebestanden en niet voor grote gestructureerde datasets, terwijl JSON geschikt is voor elke schaal van gestructureerde data.

De Python TOML-module

Standaardbibliotheken van Python bieden momenteel geen ondersteuning voor het ontleden van TOML-gegevens, op het moment van schrijven van dit artikel. Dit kan veranderen na TOML versie 1.0.0 is vrijgegeven. Voorlopig moet u een Python-module van een derde partij gebruiken, genaamd toml. U kunt deze module in Ubuntu installeren met een van de onderstaande opdrachten:

$ sudo apt install python3-toml
$ pip3 installeer toml

Een TOML-bestand parseren met Python TOML-module

Het ontleden van een TOML-bestand met behulp van de python3-toml-module is vrij eenvoudig. U kunt ofwel de "toml.load” methode om het hele bestand te ontleden, of u kunt de “toml.laadt”-methode om een ​​specifiek TOML-geformatteerd sleutel-waardepaar te ontleden. Uitgaande van een "gegevens".toml" -bestand de TOML-geformatteerde tekenreeksen bevat die in het bovenstaande voorbeeld worden genoemd, de onderstaande code zal TOML-gegevens ontleden en afdrukken als een python-woordenboek:

#!/usr/bin/env python3
import toml
afdrukken (toml.laden("gegevens.toml"))

Als u de bovenstaande code uitvoert, wordt de volgende uitvoer geproduceerd:

'name': 'PC Game', 'default': 'profile_name': 'Profile', 'player_name': 'Player',
'profile_created': datumtijd.datetime(1979, 5, 27, 7, 32, tzinfo=object op 0x7f3506b3d850>), 'sound': True, 'user': 'profile': 'name': 'profile1',
'player_name': 'player1', 'class': 'warrior', 'settings': 'sound': False,
'default_inventory': 'warrior': [['sword', 'shield'], ['plate armor', 'plate helm']],
'mage': [['staff', 'wand'], ['robe', 'hood']], 'items': ['health potion', 'antidotum',
'mana-drankje']

Nu u een python-woordenboekobject hebt, kunt u elke logica in uw programma implementeren om de woordenboekgegevens te verwerken.

Een Python-woordenboek dumpen als TOML-geformatteerde gegevens

Een python-woordenboek kan worden gedumpt in TOML-geformatteerde tekenreeksen met behulp van de "toml.dumps"-methode, of het object kan in een bestand worden gedumpt met "toml.dump” methode. In het onderstaande voorbeeld wordt een woordenboekobject geconverteerd in nito TOML-geformatteerde tekenreeksen:

#!/usr/bin/env python3
import toml
data = toml.laden("gegevens.toml")
afdrukken (toml.stortplaatsen (gegevens))

Als u de bovenstaande code uitvoert, wordt de volgende uitvoer geproduceerd:

naam = "PC-spel"
[standaard]
profile_name = "Profiel"
player_name = "Speler"
profile_created = 1979-05-27T07:32:00-08:00
geluid = waar

[default_inventory]
krijger = [ [ "zwaard", "schild",], [ "plaatpantser", "plaathelm",],]
mage = [ [ "staf", "staf",], [ "mantel", "kap",],]
items = [ "gezondheidsdrank", "tegengif", "manadrank",]

[gebruiker.profiel]
naam = "profiel1"
player_name = "speler1"
klasse = "krijger"
[gebruiker.instellingen]
geluid = false

Om een ​​woordenboekobject om te zetten in een TOML-geformatteerde tekenreeks en deze op te slaan in een bestand, kunt u de "toml.dump(dictionary_object, output_file)” methode.

Conclusie

Een TOML-bestand in eenvoudiger bewoordingen is slechts een INI-configuratiebestand met een betere structuur en syntaxis, waardoor het gemakkelijker kan worden geparseerd en beter leesbaar is. Het TOML-bestandsformaat wordt vaak vergeleken met het JSON-bestandsformaat, maar afgezien van het gebruik in configuratiebestanden heeft TOML niet veel nut. JSON daarentegen is veel veelzijdiger en kan worden gebruikt in verschillende gebruikssituaties die elk type gegevensstructuur vereisen.

Met WinMouse kunt u de beweging van de muisaanwijzer op Windows-pc aanpassen en verbeteren
Als u de standaardfuncties van uw muisaanwijzer wilt verbeteren, gebruik dan freeware WinMuis. Het voegt meer functies toe om u te helpen het meeste u...
Linkermuisknop werkt niet op Windows 10
Als u een speciale muis gebruikt met uw laptop of desktopcomputer, maar de linkermuisknop werkt niet not op Windows 10/8/7 om wat voor reden dan ook, ...
Cursor springt of beweegt willekeurig tijdens het typen in Windows 10
Als u merkt dat uw muiscursor vanzelf springt of beweegt, automatisch, willekeurig tijdens het typen op een Windows-laptop of -computer, dan kunnen en...