Cómo leer y escribir archivos Toml usando Python

Cómo leer y escribir archivos Toml usando Python
Toml, abreviatura de "Tom's Obvio Minimal Language", es un formato de archivo relativamente nuevo y popular que se centra en una semántica mínima para escribir archivos de configuración. El formato de archivo ha sido creado por Tom Preston-Werner, el ex CEO de GitHub. Hasta el momento en que se escribió este artículo, el primer candidato de lanzamiento de la versión 1.0.0 ha sido etiquetado, por lo que la especificación está más o menos finalizada. Este artículo dará una breve introducción al formato de archivo TOML y describirá cómo se puede usar este formato de archivo en aplicaciones y scripts de Python.

Ejemplo de archivo de configuración de Toml

La especificación para TOML incluye el uso de pares de valor clave sensibles a la caja. Las teclas están en el lado izquierdo, mientras que los valores lo harán en el lado derecho; Estos términos están separados a ambos lados por un signo igual. Los pares de valor clave son idénticos a la sintaxis de la declaración variable que verá en la mayoría de los lenguajes de programación. También puede definir tablas y subconse (secciones y subsecciones) en soportes cuadrados para mantener pares de valores clave organizados para mejorar la lógica y aplicación de análisis en sus programas. Los valores pueden ser de tipos de cadena, entero, flotador, booleano, matriz y tiempo y fecha. Toml permite el uso de la sintaxis del punto para que pueda definir una tabla (sección) como "tabla.subtendible "o una clave como" clave.identificador ", también. La extensión del archivo utilizada para un archivo Toml es .toml. A continuación se muestra un ejemplo abreviado de un archivo TOML:

nombre = "Juego de PC"
[por defecto]
perfil_name = "perfil"
jugador_name = "Player"
perfil_created = 1979-05-27T07: 32: 00-08: 00
sonido = verdadero
[usuario]
[usuario.perfil]
nombre = "Perfil1"
jugador_name = "Player1"
class = "guerrero"
[usuario.ajustes]
sonido = falso
[default_inventory]
guerrero = [["espada", "escudo"], ["armadura de placa", "timón de placa"]]
mago = [["personal", "varita"], ["túnica", "capucha"]]
elementos = [
"poción de salud",
"antídoto",
"Poción de maná"
]

Como referencia, el mismo archivo de configuración se escribe en JSON a continuación:


"Nombre": "Juego de PC",
"por defecto":
"perfil_name": "perfil",
"Player_Name": "Jugador",
"Perfil_created": "1979-05-27T15: 32: 00.000z ",
"sonido": verdadero
,
"Usuario":
"perfil":
"Nombre": "Perfil1",
"Player_Name": "Player1",
"Clase": "Guerrero"
,
"ajustes":
"sonido": falso

,
"default_inventory":
"guerrero": [
[
"espada",
"blindaje"
],
[
"Armadura de placa",
"Yelmo de placas"
]
],
"mago": [
[
"personal",
"varita mágica"
],
[
"túnica",
"capucha"
]
],
"elementos": [
"poción de salud",
"antídoto",
"Poción de maná"
]

Diferencias entre los formatos de archivo JSON e INI

Toml es similar a los formatos JSON e INI de muchas maneras, con algunas diferencias que pueden determinar qué formato de archivo querrá usar. El formato de archivo Toml enfatiza la legibilidad humana y parece mucho más limpio para leer. Los archivos INI no admiten secciones anidadas y pares de valor clave anidados. A diferencia de JSON, Toml permite comentarios (con el símbolo #). Los datos anidados largos en un archivo JSON se pueden escribir en Toml en unas pocas líneas.

Sin embargo, puede ser confuso identificar adecuadamente la estructura en jerarquías anidadas largas en TOML, mientras que en JSON la estructura es mucho más clara, a pesar de que los datos anidados pueden parecer detenidos. TomL está diseñado principalmente para archivos de configuración y no para grandes conjuntos de datos estructurados, mientras que JSON es adecuado para cualquier escala de datos estructurados.

El módulo Python Toml

Las bibliotecas estándar de Python no tienen ningún soporte para analizar datos Toml, al momento de escribir este artículo. Esto puede cambiar después de Toml Versión 1.0.0 se lanza. Por el momento, tendrá que usar un módulo de Python de terceros llamado Toml. Puede instalar este módulo en Ubuntu usando uno de los comandos a continuación:

$ sudo apt install python3-toml
$ PIP3 Instalar Toml

Analizar un archivo Toml con el módulo Python Toml

Anular un archivo Toml que usa el módulo Python3-TOML es bastante sencillo. Puedes usar el "toml.Método de carga "para analizar todo el archivo, o puede usar el" Toml.Método de cargas "para analizar cualquier par de valores de clave formateado TOML específico. Suponiendo un "datos.El archivo Toml ”contiene las cadenas formateadas Toml mencionadas en el ejemplo anterior, el código a continuación analizará e imprimirá los datos Toml como un diccionario de Python:

#!/usr/bin/env python3
importar toml
Imprimir (Toml.Cargar datos.toml "))

Ejecutar el código anterior producirá la siguiente salida:

'Name': 'PC Game', 'Default': 'perfil_name': 'perfil', 'jugador_name': 'jugador',
'perfil_created': DateTime.DateTime (1979, 5, 27, 7, 32, tzinfo =Objeto en 0x7f3506b3d850>), 'sonido': true, 'user': 'perfil': 'name': 'perfil1',
'Player_Name': 'Player1', 'Clase': 'Warrior', 'Configuración': 'Sound': False,
'Default_inventory': 'Warrior': [['Sword', 'Shield'], ['Armadura de placa', 'Placa Helm']],
'Mago': [['personal', 'varita'], ['Robe', 'Hood']], 'Artículos': ['Poción de salud', 'Antídoto',
'Poción de maná']

Ahora que tiene un objeto de diccionario de Python, puede implementar cualquier lógica en su programa para manejar los datos del diccionario.

Dumping a Python Dictionary como Toml formateó datos

Se puede arrojar un diccionario de Python en cuerdas formateadas Toml usando el "Toml.Método de volcados ", o el objeto puede verse en un archivo utilizando" Toml.método de vertido ". El ejemplo a continuación convertirá un objeto de diccionario Nito Toml Strings formateado:

#!/usr/bin/env python3
importar toml
datos = toml.Cargar datos.Toml ")
Imprimir (Toml.volcados (datos))

Ejecutar el código anterior producirá la siguiente salida:

nombre = "Juego de PC"
[por defecto]
perfil_name = "perfil"
jugador_name = "Player"
perfil_created = 1979-05-27T07: 32: 00-08: 00
sonido = verdadero
[default_inventory]
Warrior = [["espada", "escudo",], ["armadura de placa", "timón de placa",],]
mago = [["personal", "varita",], ["túnica", "capucha",],]
Artículos = ["Poción de salud", "antídoto", "poción de maná",]
[usuario.perfil]
nombre = "Perfil1"
jugador_name = "Player1"
class = "guerrero"
[usuario.ajustes]
sonido = falso

Para convertir un objeto de diccionario en una cadena formateada Toml y almacenarlo en un archivo, puede usar el "Toml.DULT (Dictionary_Object, output_file) "Método.

Conclusión

Un archivo TOML en términos más simples es solo un archivo de configuración INI con una mejor estructura y sintaxis, facilitando un análisis más fácil y una mejor legibilidad. El formato de archivo Toml a menudo se compara con el formato de archivo JSON, pero aparte de su uso en los archivos de configuración, Toml no tiene mucha utilidad. JSON, por otro lado, es mucho más versátil y se puede usar en diferentes casos de uso que requieren cualquier tipo de estructura de datos.