La serialización consiste en convertir objetos de Python en un formato que pueda:
guardarse en un archivo
enviarse por red
reconstruirse más tarde
Python ofrece dos métodos principales:
Pickle → guarda objetos de Python tal cual
JSON → formato estándar, compatible con otros lenguajes
1. Serialización con Pickle
Pickle permite guardar cualquier objeto de Python: listas, diccionarios, clases, etc.
Guardar un objeto
import pickle
datos = {"nombre": "Ana", "edad": 22}
with open("datos.pkl", "wb") as f:
pickle.dump(datos, f)
Cargar un objeto
with open("datos.pkl", "rb") as f:
datos_cargados = pickle.load(f)
print(datos_cargados)
Ventajas de Pickle
Guarda objetos complejos
Muy fácil de usar
Desventajas
No es legible por humanos
No es seguro cargar datos de fuentes desconocidas
No es compatible con otros lenguajes
2. Serialización con JSON
JSON es un formato universal, legible y compatible con cualquier lenguaje.
Guardar datos en JSON
import json
usuario = {
"nombre": "Luis",
"edad": 30,
"activo": True,
"cursos": ["Python", "Redes"]
}
with open("usuario.json", "w", encoding="utf-8") as f:
json.dump(usuario, f, indent=4, ensure_ascii=False)
Cargar datos desde JSON
with open("usuario.json", "r", encoding="utf-8") as f:
datos = json.load(f)
print(datos)
Ventajas de JSON
Legible
Compatible con cualquier lenguaje
Ideal para APIs, configuraciones, datos estructurados
Desventajas
No soporta objetos complejos directamente
Solo tipos básicos: dict, list, str, int, float, bool, None
3. Convertir objetos personalizados a JSON
Para serializar clases, hay que convertirlas a diccionarios.
class Alumno:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
a = Alumno("Ana", 20)
# Convertir a dict
datos = a.__dict__
json.dump(datos, open("alumno.json", "w"))
ACTIVIDAD PRÁCTICA: “Gestor de usuarios con guardado y carga”
Objetivo: que tus alumnos aprendan a guardar y cargar datos de forma persistente usando JSON y Pickle.
Enunciado
Crea un programa que gestione usuarios con:
nombre
email
edad
El programa debe permitir:
Añadir usuarios
Mostrar usuarios
Guardarlos en un archivo JSON
Guardarlos en un archivo Pickle
Cargar usuarios desde JSON
Cargar usuarios desde Pickle
Pistas
Usa una lista de diccionarios
Crea funciones:
guardar_json(),cargar_json(), etc.Usa un menú con bucles
Solución propuesta
import json
import pickle
usuarios = []
def añadir_usuario():
nombre = input("Nombre: ")
email = input("Email: ")
edad = int(input("Edad: "))
usuarios.append({"nombre": nombre, "email": email, "edad": edad})
def mostrar_usuarios():
for u in usuarios:
print(f"{u['nombre']} - {u['email']} - {u['edad']} años")
def guardar_json():
with open("usuarios.json", "w", encoding="utf-8") as f:
json.dump(usuarios, f, indent=4, ensure_ascii=False)
print("Usuarios guardados en JSON.")
def cargar_json():
global usuarios
with open("usuarios.json", "r", encoding="utf-8") as f:
usuarios = json.load(f)
print("Usuarios cargados desde JSON.")
def guardar_pickle():
with open("usuarios.pkl", "wb") as f:
pickle.dump(usuarios, f)
print("Usuarios guardados en Pickle.")
def cargar_pickle():
global usuarios
with open("usuarios.pkl", "rb") as f:
usuarios = pickle.load(f)
print("Usuarios cargados desde Pickle.")
# --- Menú ---
while True:
print("\n--- GESTOR DE USUARIOS ---")
print("1. Añadir usuario")
print("2. Mostrar usuarios")
print("3. Guardar en JSON")
print("4. Cargar desde JSON")
print("5. Guardar en Pickle")
print("6. Cargar desde Pickle")
print("7. Salir")
opcion = input("Elige opción: ")
if opcion == "1":
añadir_usuario()
elif opcion == "2":
mostrar_usuarios()
elif opcion == "3":
guardar_json()
elif opcion == "4":
cargar_json()
elif opcion == "5":
guardar_pickle()
elif opcion == "6":
cargar_pickle()
elif opcion == "7":
break
else:
print("Opción no válida.")
Ejemplo de salida
--- GESTOR DE USUARIOS ---
1. Añadir usuario
2. Mostrar usuarios
3. Guardar en JSON
4. Cargar desde JSON
5. Guardar en Pickle
6. Cargar desde Pickle
7. Salir
Elige opción: 1
Nombre: Ana
Email: ana@mail.com
Edad: 22