Resumen

La persistencia de datos en Python te permite que una aplicación recuerde su estado entre ejecuciones. Aquí verás cómo serializar objetos a JSON, escribirlos en un archivo y preparar todo para, más adelante, reconstruirlos al cargar. Con una clase central, Persistencia, lograrás guardar nombre, usuarios, libros y una fecha de guardado para auditar cambios.

¿Cómo implementar persistencia de datos con JSON en Python?

La idea clave: convertir objetos Python a formato JSON serializable, escribirlos en un archivo y, en una fase posterior, cargarlos para reconstruir el estado. Es vital manejar errores y validar datos para evitar inconsistencias.

  • Serializa estructuras a JSON para almacenamiento seguro.
  • Usa archivos .json para persistir entre ejecuciones.
  • Prioriza validación y manejo de errores.

¿Qué estructura mínima necesita la clase Persistencia?

Crea un archivo persistencia.py y define una clase que reciba el nombre del archivo. Por defecto, será biblioteca.json. Así centralizas el acceso al almacenamiento.

import json

class Persistencia:
    def __init__(self, archivo="biblioteca.json"):
        self.archivo = archivo
  • Constructor con valor por defecto: biblioteca.json.
  • Un único punto de entrada para guardar datos.

¿Cómo escribir el archivo con with open y json.dump?

El context manager with garantiza que el archivo se cierre correctamente. El modo "w" (write) escribe desde cero y el encoding "utf-8" asegura caracteres como eñes y tildes.

def guardar_datos(self, biblioteca):
    datos = {}
    datos["nombre"] = biblioteca.nombre

    with open(self.archivo, "w", encoding="utf-8") as f:
        json.dump(datos, f, indent=2, ensure_ascii=False)
  • Usa with open(..., "w", encoding="utf-8") as f.
  • json.dump admite indent para legibilidad.
  • ensure_ascii=False conserva caracteres en español.

¿Cómo guardar usuarios, libros y fecha de guardado?

Además del nombre, es útil persistir las listas de usuarios y libros. Para colecciones de objetos, conviene convertir cada elemento a diccionario, por ejemplo con dict().

¿Cómo convertir objetos a diccionarios con dict?

Aprovecha una lista comprimida para transformar cada elemento de biblioteca.usuarios y biblioteca.libros.

datos = {
    "nombre": biblioteca.nombre,
    "usuarios": [dict(usuario) for usuario in biblioteca.usuarios],
    "libros": [dict(libro) for libro in biblioteca.libros],
}
  • Lista comprimida para recorrer colecciones.
  • Conversión con dict() para serializar a JSON.

¿Cómo registrar la fecha de guardado?

Agregar una marca de tiempo te permite saber cuándo se persistió el estado, útil para auditoría y recargas futuras.

# Ejemplo conceptual según lo explicado:
# from DateTime import DateTime
# datos["fecha_guardado"] = DateTime.now().ISOFormat()
  • Campo fecha_guardado para trazabilidad.
  • Sello temporal en ISO format con now.

¿Qué errores y buenas prácticas debes considerar?

Mantén consistencia en nombres de atributos y el idioma del código. Un error típico fue usar biblioteca.name cuando el atributo real era biblioteca.nombre. Evita mezclar idiomas en variables; si eliges español, sé consistente, aunque se recomienda inglés en proyectos reales para evitar tildes en identificadores.

  • Verifica atributos: biblioteca.nombre en lugar de name.
  • Usa UTF-8 y ensure_ascii=False para textos en español.
  • Valida datos y maneja errores al serializar y escribir.
  • Comprueba resultados: tras ejecutar, se genera biblioteca.json con el contenido esperado.
  • Ejemplos prácticos: cambio de nombre "Platzi Biblioteca" a "B2" y verificación en el .json.

¿Te gustaría que incluyamos la carga desde JSON para reconstruir el estado en tu sistema de biblioteca? Deja tus dudas o casos y continuamos la conversación.