Python:
Trabajando con YAML
Cómo hacerlo:
Leer y escribir YAML en Python generalmente implica el uso de una biblioteca de terceros, siendo PyYAML
la más popular. Para comenzar, necesitarás instalar PyYAML ejecutando pip install PyYAML
.
Ejemplo: Escribir en un archivo YAML
import yaml
data = {'una lista': [1, 42, 3.141, 1337, 'ayuda', u'€'],
'una cadena': '¡bu!',
'otro diccionario': {'foo': 'bar', 'clave': 'valor', 'la respuesta': 42}}
with open('ejemplo.yaml', 'w') as f:
yaml.dump(data, f, default_flow_style=False)
# Esto crea `ejemplo.yaml` con los datos estructurados en formato YAML.
Ejemplo: Leer de un archivo YAML
import yaml
with open('ejemplo.yaml', 'r') as f:
data_cargada = yaml.safe_load(f)
print(data_cargada)
# Salida:
# {'una lista': [1, 42, 3.141, 1337, 'ayuda', '€'],
# 'una cadena': '¡bu!',
# 'otro diccionario': {'foo': 'bar', 'clave': 'valor', 'la respuesta': 42}}
Usar YAML para Configuración
Muchos programadores usan YAML para gestionar configuraciones de aplicaciones. Aquí tienes un ejemplo de cómo uno podría estructurar un archivo de configuración y leerlo:
config.yaml:
base_de_datos:
host: localhost
puerto: 5432
nombre_usuario: admin
contraseña: secreto
Leyendo el archivo de configuración en Python:
import yaml
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
print(config['base_de_datos']['host']) # Salida: localhost
Manejo de Estructuras Complejas
Para estructuras complejas, PyYAML te permite definir objetos Python personalizados. Sin embargo, asegúrate de practicar métodos seguros utilizando safe_load
para evitar ejecutar funciones u objetos arbitrarios.
import yaml
# Definir un objeto Python
class Ejemplo:
def __init__(self, valor):
self.valor = valor
# Constructor personalizado
def constructor_ejemplo(loader, node):
valor = loader.construct_scalar(node)
return Ejemplo(valor)
# Añadir constructor para la etiqueta "!example"
yaml.add_constructor('!example', constructor_ejemplo)
yaml_str = "!example 'datos'"
cargado = yaml.load(yaml_str, Loader=yaml.FullLoader)
print(cargado.valor) # Salida: datos
En este fragmento, !example
es una etiqueta personalizada utilizada para instanciar un objeto Ejemplo
con el valor ‘datos’ de una cadena YAML. Cargadores personalizados como este aumentan la flexibilidad de PyYAML, permitiendo el procesamiento de estructuras de datos y tipos más complejos.