Introducción
En el desarrollo de software moderno, los datos suelen almacenarse y transportarse en formatos estandarizados. JSON (JavaScript Object Notation) y YAML (YAML Ain't Markup Language) son dos de los formatos más populares para todo tipo de usos, desde respuestas de APIs web hasta archivos de configuración de aplicaciones.
En este laboratorio, adquirirás las habilidades esenciales para trabajar con estos formatos en Python. Comenzarás utilizando el módulo integrado json de Python para leer y escribir datos JSON. Luego, explorarás YAML como una alternativa más legible para los humanos y aprenderás a analizarlo utilizando la biblioteca ruamel.yaml. Finalmente, descubrirás la biblioteca anyconfig, una herramienta potente que simplifica la gestión de configuraciones al permitirte cargar datos desde diversos formatos de archivo sin preocuparte por la implementación subyacente.
Trabajar con JSON
En este paso, aprenderás a serializar y deserializar datos JSON. JSON significa JavaScript Object Notation y es un formato ligero para almacenar y transportar datos. Se utiliza comúnmente cuando se envían datos desde un servidor a una página web.
Nota: Si no estás familiarizado con el uso de WebIDE (similar a VS Code), por favor apréndelo primero en este laboratorio.
Primero, escribamos un diccionario de Python en un archivo JSON. Este proceso se denomina serialización.
En el explorador de archivos a la izquierda, abre el archivo json_handler.py y añade el siguiente código. Este script creará un nuevo archivo llamado output.json.
## Write JSON file: json.dump() writes Python object as JSON
import json
content = {"name": "Joe", "age": 20}
with open("output.json", "w") as f: ## Open file in write mode
json.dump(content, f, indent=2) ## Write JSON with 2-space indentation
Analicemos el código:
import json: Importa el módulo JSON integrado de Python.content = {"name": "Joe", "age": 20}: Define un diccionario de Python que queremos guardar.with open("output.json", "w") as f:: Abre un archivo llamadooutput.jsonen modo escritura ("w").json.dump(content, f, indent=2): Escribe el diccionariocontenten el archivofen formato JSON. El argumentoindent=2formatea el JSON con una sangría de 2 espacios, haciéndolo más legible.
Ahora, ejecuta el script en la terminal para crear el archivo:
python3 json_handler.py
No verás ninguna salida, pero se habrá creado un nuevo archivo output.json. Puedes ver su contenido con el comando cat:
cat output.json
Deberías ver el contenido JSON formateado:
{
"name": "Joe",
"age": 20
}
A continuación, leamos un archivo JSON y convirtámoslo en un objeto de Python. Este proceso se denomina deserialización. Leeremos el archivo data.json que ha sido preparado para ti.
Modifica el archivo json_handler.py con el siguiente código:
## Read JSON file: json.load() parses JSON from file object
import json
with open("data.json", "r") as f: ## Open file in read mode
content = json.load(f) ## Parse JSON and return Python dict/list
print(content)
Esto es lo que hace el nuevo código:
with open("data.json", "r") as f:: Abre el archivo existentedata.jsonen modo lectura ("r").content = json.load(f): Analiza los datos JSON del archivo y los convierte en un diccionario de Python.print(content): Imprime el diccionario resultante en la consola.
Ejecuta el script de nuevo:
python3 json_handler.py
Esta vez, verás el diccionario de Python impreso en la terminal:
{'username': 'labex', 'id': 12345}
Manejo de YAML
En este paso, explorarás YAML, un formato de serialización de datos diseñado para ser legible por humanos. En comparación con JSON, YAML suele ser más fácil de mantener manualmente y permite incluir comentarios, lo que lo convierte en una opción popular para archivos de configuración.
Python no tiene un analizador de YAML integrado, por lo que necesitas instalar una biblioteca de terceros. Hay dos bibliotecas principales disponibles: PyYaml y ruamel.yaml. La biblioteca ruamel.yaml es más compatible con la especificación YAML y es mejor preservando los comentarios y el formato al modificar archivos. La utilizaremos en este laboratorio.
Primero, instala ruamel.yaml usando pip:
pip install ruamel.yaml
Verás una salida indicando que la instalación fue exitosa.
Ahora, usemos esta biblioteca para leer el archivo config.yaml. Abre el archivo yaml_handler.py en el editor y añade el siguiente código:
## Read YAML file using ruamel.yaml library
from ruamel.yaml import YAML
with open("config.yaml") as f:
yaml=YAML() ## Create YAML parser instance
data = yaml.load(f) ## Parse YAML and return Python dict/list
print(data)
Revisemos el código:
from ruamel.yaml import YAML: Importa la claseYAMLnecesaria de la biblioteca.with open("config.yaml") as f:: Abre el archivoconfig.yamlpara lectura.yaml=YAML(): Crea una instancia del analizador YAML.data = yaml.load(f): Analiza el contenido YAML del archivo y lo convierte en un objeto de Python (en este caso, un diccionario).print(data): Imprime los datos cargados.
Ejecuta el script desde la terminal:
python3 yaml_handler.py
La salida será la representación en diccionario de Python del contenido del archivo YAML:
{'user': {'name': 'Alex', 'email': 'alex@example.com'}}
Uso de Anyconfig
En este paso, descubrirás el paquete anyconfig, una biblioteca muy útil que abstrae el formato subyacente del archivo de configuración. Te permite cargar un diccionario de Python desde varios formatos como JSON, YAML, TOML y más, utilizando una única función sencilla. Esto es extremadamente útil cuando tu aplicación necesita admitir múltiples formatos de configuración.
Primero, necesitas instalar anyconfig. Dado que anyconfig necesita un backend para analizar YAML, y ya hemos instalado ruamel.yaml, lo utilizará automáticamente.
Instala anyconfig usando pip:
pip install anyconfig
Una vez completada la instalación, puedes usar anyconfig para cargar archivos de configuración. Vamos a usarlo para cargar el mismo archivo config.yaml del paso anterior.
Abre el archivo anyconfig_handler.py y añade el siguiente código:
## anyconfig: load configuration files in various formats (JSON, YAML, TOML, etc.)
import anyconfig
## anyconfig.load() auto-detects the file format based on the extension.
conf = anyconfig.load("/home/labex/project/config.yaml")
print(conf)
Este código es mucho más simple:
import anyconfig: Importa la biblioteca.anyconfig.load(...): Esta única función abre, lee y analiza el archivo. Detecta automáticamente queconfig.yamles un archivo YAML y utiliza el analizador apropiado. Ten en cuenta que aquí estamos usando una ruta absoluta, lo cual es una buena práctica cuando la ubicación del script puede variar.
Ahora, ejecuta el script:
python3 anyconfig_handler.py
Debido a que este ejemplo sigue cargando config.yaml, la salida es idéntica a la del paso anterior, pero el código requerido es más conciso y flexible.
{'user': {'name': 'Alex', 'email': 'alex@example.com'}}
Con anyconfig, también puedes reemplazar "config.yaml" por "data.json" y volver a ejecutar el script. El código seguirá funcionando sin necesidad de otros cambios, pero el diccionario impreso reflejará el contenido de data.json en lugar del archivo YAML.
Resumen
En este laboratorio, aprendiste a manejar dos formatos comunes de serialización de datos en Python: JSON y YAML. Estas habilidades son fundamentales para tareas como trabajar con APIs web, gestionar configuraciones de aplicaciones e intercambiar datos.
Comenzaste con el módulo integrado json de Python, utilizando json.dump() para serializar un diccionario de Python en un archivo JSON y json.load() para deserializar un archivo JSON de vuelta a un objeto de Python.
A continuación, exploraste YAML como una alternativa legible para humanos frente a JSON. Aprendiste a instalar la biblioteca ruamel.yaml y a utilizarla para analizar un archivo YAML.
Finalmente, conociste la biblioteca anyconfig, una herramienta potente que simplifica la gestión de configuraciones. Viste cómo su función anyconfig.load() puede leer datos de diferentes formatos de archivo sin requerir código específico para cada formato, haciendo que tus aplicaciones sean más flexibles y fáciles de mantener.



