Come leggere e scrivere i file Toml usando Python

Come leggere e scrivere i file Toml usando Python
Toml, abbreviazione di "Tom's Ovvio Minimal Language", è un formato di file relativamente nuovo e popolare che si concentra sulla semantica minima per la scrittura di file di configurazione. Il formato di file è stato creato da Tom Preston-Werner, ex CEO di GitHub. A partire dal momento in cui è stato scritto questo articolo, il primo candidato alla versione 1.0.0 è stato taggato, quindi la specifica è più o meno finalizzata. Questo articolo darà una breve introduzione al formato di file Toml e descriverà come questo formato di file può essere utilizzato nelle applicazioni e nelle script Python.

Esempio di file di configurazione Toml

La specifica per TOML include l'uso di coppie di valore chiave distinto. Le chiavi sono sul lato sinistro, mentre i valori saranno sul lato destro; Questi termini sono separati su entrambi i lati da un segno uguale. Le coppie di valore chiave sono identiche alla sintassi della dichiarazione variabile che vedrai nella maggior parte dei linguaggi di programmazione. Puoi anche definire tabelle e sottotitoli (sezioni e sottosezioni) tra parentesi quadrate per mantenere organizzate coppie di valore chiave per la logica di analisi e l'applicazione migliorate nei programmi. I valori possono essere di tipi di stringa, intero, galleggiante, booleano, array e data e data. Toml consente l'uso della sintassi DOT in modo da poter definire una tabella (sezione) come “Tabella.Sottotable "o una chiave come" Chiave.identificatore ". L'estensione del file utilizzata per un file TOML è .Toml. Di seguito è riportato un esempio abbreviato di un file Toml:

name = "PC Game"
[predefinito]
profile_name = "profilo"
Player_name = "Player"
Profile_Created = 1979-05-27T07: 32: 00-08: 00
suono = vero
[utente]
[utente.profilo]
name = "profile1"
Player_name = "Player1"
class = "guerriero"
[utente.impostazioni]
suono = falso
[default_inventory]
Warrior = [["Sword", "Shield"], ["Armatura a piastre", "Helm piastra"]]
Mage = [["Staff", "Wand"], ["Robe", "Hood"]]
articoli = [
"Pozione per la salute",
"antidoto",
"Mana Pozione"
"

Per riferimento, lo stesso file di configurazione è scritto in JSON di seguito:


"Nome": "PC Game",
"predefinito":
"profilo_name": "profilo",
"Player_name": "Player",
"Profile_Created": "1979-05-27T15: 32: 00.000Z ",
"suono": vero
,
"utente":
"Profilo":
"Nome": "Profile1",
"Player_name": "Player1",
"Classe": "Warrior"
,
"impostazioni":
"suono": falso

,
"default_inventory":
"Guerriero": [
[
"spada",
"scudo"
",
[
"Armatura a piastre",
"timone piatto"
"
",
"Mago": [
[
"personale",
"bacchetta"
",
[
"abito",
"cappuccio"
"
",
"elementi": [
"Pozione per la salute",
"antidoto",
"Mana Pozione"
"

Differenze tra i formati di file JSON e INI

Toml è simile ai formati JSON e INI in molti modi, con alcune differenze che possono determinare quale formato di file si desidera utilizzare. Il formato di file toml enfatizza la leggibilità umana e appare molto più pulito da leggere. I file INI non supportano sezioni nidificate e coppie di valore chiave nidificato. A differenza di JSON, Toml consente commenti (con il simbolo #). I dati nidificati a lungo in un file JSON possono essere scritti in Toml in poche righe.

Tuttavia, può essere confuso identificare correttamente la struttura nelle gerarchie a lungo nidificate in TOML, mentre in JSON la struttura è molto più chiara, anche se i dati nidificati possono apparire verbose. TOML è progettato principalmente per i file di configurazione e non per set di dati strutturati di grandi dimensioni, mentre JSON è adatto a qualsiasi scala di dati strutturati.

Il modulo Python Toml

Le biblioteche standard Python non hanno attualmente alcun supporto per l'analisi dei dati TOML, al momento della stesura di questo articolo. Questo può cambiare dopo Toml versione 1.0.0 è rilasciato. Per il momento, dovrai usare un modulo Python di terze parti chiamato Toml. È possibile installare questo modulo in Ubuntu usando uno dei comandi qui sotto:

$ sudo apt install python3-toml
$ pip3 Installa toml

Analizzare un file Toml usando il modulo Toml Python

Analizzare un file Toml usando il modulo Python3-Toml è abbastanza semplice. Puoi usare il "toml.Carica "metodo per analizzare l'intero file oppure è possibile utilizzare" Toml.Carichi "Metodo per analizzare qualsiasi coppia specifica per valore tasto TOML. Supponendo un "dati.Il file Toml "contiene le stringhe formattate Toml menzionate nell'esempio sopra, il codice seguente analizza e stamperà i dati Toml come un dizionario Python:

#!/usr/bin/env python3
Importa Toml
Stampa (Toml.Caricamento dati.toml "))

L'esecuzione del codice sopra produrrà il seguente output:

'Nome': 'PC Game', 'Default': 'Profile_name': 'Profile', 'Player_Name': 'Player',
'profile_created': datetime.DateTime (1979, 5, 27, 7, 32, tzinfo =Oggetto su 0x7f3506b3d850>), 'audio': true, 'utente': 'profile': 'name': 'profile1',
'player_name': 'player1', 'class': 'warrior', 'impostazioni': 'suono': false,
'default_inventory': 'warrior': [['sword', 'scield'], ['piastra armatura', 'piastra helm'],
'Mage': [["Staff", 'Wand'], ['Robe', 'Hood'], 'Elements': ['Health Potion', 'Antidote',
'Mana Potion']

Ora che hai un oggetto di dizionario Python, puoi implementare qualsiasi logica nel tuo programma per gestire i dati del dizionario.

Dumping di un dizionario Python come dati formattati Toml

Un dizionario Python può essere scaricato in stringhe formattate Toml usando il "Toml.Metodo dumps "o l'oggetto può essere scaricato in un file usando" Toml.Metodo dump ". L'esempio seguente convertirà un oggetto del dizionario Nito Toml Formattate stringhe:

#!/usr/bin/env python3
Importa Toml
data = toml.Caricamento dati.toml ")
Stampa (Toml.dumps (dati))

L'esecuzione del codice sopra produrrà il seguente output:

name = "PC Game"
[predefinito]
profile_name = "profilo"
Player_name = "Player"
Profile_Created = 1979-05-27T07: 32: 00-08: 00
suono = vero
[default_inventory]
Warrior = [["Sword", "Shield",], ["Armatura piastra", "timone piastra",],]
mage = [["staff", "bacchetta",], ["abito", "hood",],]
articoli = ["sanità pozione", "antidoto", "mana pozione",]
[utente.profilo]
name = "profile1"
Player_name = "Player1"
class = "guerriero"
[utente.impostazioni]
suono = falso

Per convertire un oggetto Dizionario in una stringa formattata TOML e memorizzarlo in un file, è possibile utilizzare il "Toml.dump (dizionario_object, output_file) ".

Conclusione

Un file Toml in termini più semplici è solo un file di configurazione INI con una migliore struttura e sintassi, facilitando l'analisi più semplice e una migliore leggibilità. Il formato del file Toml viene spesso confrontato con il formato del file JSON, ma a parte il suo utilizzo nei file di configurazione, TOML non ha molta utilità. JSON, d'altra parte, è molto più versatile e può essere utilizzato in diversi casi d'uso che richiedono qualsiasi tipo di struttura dei dati.