Comment lire et écrire des fichiers Toml à l'aide de Python

Comment lire et écrire des fichiers Toml à l'aide de Python
Toml, abréviation de «Tom's Evident Minimal Langual», est un format de fichiers relativement nouveau et populaire qui se concentre sur la sémantique minimale pour écrire des fichiers de configuration. Le format de fichier a été créé par Tom Preston-Werner, l'ancien PDG de Github. Au moment où cet article a été écrit, le premier candidat à la version 1.0.0 a été marqué, donc la spécification est plus ou moins finalisée. Cet article donnera une brève introduction au format de fichier Toml et décrira comment ce format de fichier peut être utilisé dans les applications et scripts Python.

Exemple de fichier de configuration Toml

La spécification pour Toml comprend l'utilisation de paires de valeurs clés sensibles à la casse. Les clés sont sur le côté gauche, tandis que les valeurs seront sur le côté droit; Ces termes sont séparés de chaque côté par un signe égal. Les paires de valeurs clés sont identiques à la syntaxe de déclaration variable que vous verrez dans la plupart des langages de programmation. Vous pouvez également définir des tables et des sous-tables (sections et sous-sections) dans des crochets pour garder les paires de valeurs clés organisées pour une logique et une application d'analyse améliorée dans vos programmes. Les valeurs peuvent être de chaînes, entiers, flotteurs, booléens, tableau et types d'heure et de date. Toml permet l'utilisation de la syntaxe de points afin que vous puissiez définir une table (section) comme «Tableau.subtetable "ou une clé comme" clé.identifiant », aussi. L'extension de fichier utilisée pour un fichier Toml est .toml. Vous trouverez ci-dessous un exemple abrégé d'un fichier Toml:

name = "jeu pc"
[défaut]
profil_name = "Profil"
Player_name = "Player"
Profil_Created = 1979-05-27T07: 32: 00-08: 00
son = vrai
[utilisateur]
[utilisateur.profil]
name = "profil1"
Player_name = "Player1"
classe = "guerrier"
[utilisateur.paramètres]
son = faux
[default_inventory]
Warrior = [["Sword", "Shield"], ["Plate Armor", "Plate Helm"]]
Mage = [["Staff", "Wand"], ["Robe", "Hood"]]
éléments = [
"potion de vie",
"antidote",
"Potion de mana"
]]

Pour référence, le même fichier de configuration est écrit en JSON ci-dessous:


"nom": "jeu PC",
"défaut":
"Profil_name": "Profil",
"Player_name": "Joueur",
"Profil_Created": "1979-05-27T15: 32: 00.000z ",
"Sound": vrai
,
"utilisateur":
"profil":
"Nom": "Profil1",
"Player_name": "Player1",
"Classe": "guerrier"
,
"paramètres":
"Sound": faux

,
"Default_inventory":
"guerrier": [
[
"épée",
"bouclier"
]],
[
"armure de plaque",
"Helm de plaque"
]]
]],
"mage": [
[
"personnel",
"baguette magique"
]],
[
"peignoir",
"capot"
]]
]],
"articles": [
"potion de vie",
"antidote",
"Potion de mana"
]]

Différences entre les formats de fichiers JSON et INI

Toml est similaire aux formats JSON et INI à bien des égards, avec quelques différences qui peuvent déterminer le format de fichier que vous voudrez utiliser. Le format de fichier Toml met l'accent sur la lisibilité humaine et semble beaucoup plus propre à lire. Les fichiers INI ne prennent pas en charge les sections imbriquées et les paires de valeurs clés imbriquées. Contrairement à JSON, Toml autorise les commentaires (avec le symbole #). De longues données imbriquées dans un fichier JSON peuvent être écrites en Toml en quelques lignes seulement.

Cependant, il peut être déroutant d'identifier correctement la structure dans de longues hiérarchies imbriquées dans Toml, tandis que dans JSON, la structure est beaucoup plus claire, même si les données imbriquées peuvent apparaître verbeux. Toml est principalement conçu pour les fichiers de configuration et non pour les grands ensembles de données structurés, tandis que JSON convient à toute échelle de données structurées.

Le module Python Toml

Les bibliothèques standard de Python n'ont actuellement aucun support pour l'analyse des données Toml, au moment de la rédaction de cet article. Cela peut changer après Toml version 1.0.0 est libéré. Pour le moment, vous devrez utiliser un module Python tiers appelé Toml. Vous pouvez installer ce module dans Ubuntu en utilisant l'une des commandes ci-dessous:

$ sudo apt installer python3-toml
$ pip3 Installer Toml

Analyse d'un fichier Toml à l'aide du module Python Toml

Analyser un fichier Toml à l'aide du module Python3-Toml est assez simple. Vous pouvez soit utiliser le «Toml.Méthode de chargement pour analyser le fichier entier, ou vous pouvez utiliser le «Toml.Méthode des charges pour analyser toute paire de valeurs clés formatées Toml spécifiques. En supposant une «données.Le fichier Toml ”contient les chaînes formatées Toml mentionnées dans l'exemple ci-dessus, le code ci-dessous analyse et imprimera les données Toml en tant que dictionnaire Python:

#!/ usr / bin / env python3
Importer Toml
Imprimer (Toml.Chargez ("Données.Toml "))

L'exécution du code ci-dessus produira la sortie suivante:

'Name': 'PC Game', 'Default': 'Profil_name': 'Profil', 'Player_name': 'Player',
'Profil_Created': DateTime.Datetime (1979, 5, 27, 7, 32, tzinfo =Objet à 0x7f3506b3d850>), 'son': true, 'utilisateur': 'Profil': 'name': 'Profil1',
'Player_name': 'Player1', 'class': 'Warrior', 'Settings': 'Sound': false,
'Default_inventory': 'Warrior': [['Sword', 'Shield'], ['Plate Armor', 'Plate Helm']],
«Mage»: [[«personnel», «baguette»], [«robe», «Hood»]], «articles»: [«potion de santé», «antidote»,
'Mana Potion']

Maintenant que vous avez un objet de dictionnaire Python, vous pouvez implémenter toute logique de votre programme pour gérer les données du dictionnaire.

Découper un dictionnaire Python sous forme de données formatées Toml

Un dictionnaire Python peut être jeté dans des cordes à formater Toml en utilisant le «Toml.Méthode des vidages, ou l'objet peut être jeté dans un fichier à l'aide de «Toml.Méthode Dump ». L'exemple ci-dessous convertira un objet de dictionnaire Nito Toml Formated Strings:

#!/ usr / bin / env python3
Importer Toml
données = Toml.Chargez ("Données.Toml ")
Imprimer (Toml.Dumps (données))

L'exécution du code ci-dessus produira la sortie suivante:

name = "jeu pc"
[défaut]
profil_name = "Profil"
Player_name = "Player"
Profil_Created = 1979-05-27T07: 32: 00-08: 00
son = vrai
[default_inventory]
Warrior = [["Sword", "Shield",], ["Plate Armor", "Plate Helm",],]
Mage = [["Staff", "Wand",], ["Robe", "Hood",],]
Articles = ["Potion de santé", "antidote", "potion de mana",]
[utilisateur.profil]
name = "profil1"
Player_name = "Player1"
classe = "guerrier"
[utilisateur.paramètres]
son = faux

Pour convertir un objet de dictionnaire en une chaîne formatée Toml et la stocker dans un fichier, vous pouvez utiliser le «Toml.Dump (dictionary_object, output_file) ”Méthode.

Conclusion

Un fichier Toml en termes plus simples n'est qu'un fichier de configuration INI avec une meilleure structure et une meilleure syntaxe, facilitant l'analyse plus facile et une meilleure lisibilité. Le format de fichier Toml est souvent comparé au format de fichier JSON, mais en dehors de son utilisation dans les fichiers de configuration, Toml n'a pas beaucoup d'utilité. JSON, en revanche, est beaucoup plus polyvalent et peut être utilisé dans différents cas d'utilisation nécessitant n'importe quel type de structure de données.