Requisitos:
Para realizar esta práctica tan solo necesitamos un sistema con Python instalado. En nuestro caso vamos a utilizar un equipo con Ubuntu 22.04 LTS y Pycharm como framework de trabajo.
Para instalar Pycharm desde Ubuntu tan solo necesitamos teclear la instrucción:
sudo snap install pycharm-community --classic
La biblioteca Pickle:
En este tutorial usaremos la librería Pickle para guardar y recuperar los objetos desde Python, lo que se suele llamar serialización de objetos.
Guardar objetos a fichero:
Para este tutorial usaremos la clase vehículo, que tiene dos atributos: nombre y velocidad.
class Vehiculo:
def __init__(self, nombre, velocidad):
self.nombre = nombre
self.movimiento = velocidad
def descripcion(self):
d = "Nombre de vehículo: {}, velocidad: {}."
print(d.format(self.nombre, self.movimiento))
En el programa crearemos dos objetos de la clase vehículo:
#creamos un vehículo de nombre coche:
v1 = Vehiculo("coche", 90)
# creamos un vehículo de nombre velero:
v2 = Vehiculo("velero", 30)
#Mostramos la descripción de los vehículos:
v1.descripcion()
v2.descripcion()
Ahora abrimos un fichero llamado vehiculos.pickle para escritura en binario y usaremos el método dump de Pickle para guardar los objetos en dicho fichero.
with open("vehiculos.pickle","wb") as fichero:
pickle.dump(v1,fichero)
pickle.dump(v2, fichero)
El fichero tendrá un aspecto similar a este en Pycharm:
c__main__
Vehiculo
q )q}q(X nombreqX cocheqX
movimientoqKZub.c__main__
Vehiculo
q )q}q(X nombreqX veleroqX
movimientoqKub.
Recuperar objetos de fichero:
Para recuperar la información usamos el método load de Pickle, para ello abrimos el fihcero como lectura en binario, y guardamos en variables nuevas los objetos cargados.
with open("vehiculos.pickle","rb") as fichero:
v3 = pickle.load(fichero)
v4 = pickle.load(fichero)
v3.descripcion()
v4.descripcion()
De esta manera ponemos guardar objetos en un fichero y recuperarlos.
IMPORTANTE: La información guardada no estará encriptada.
Recuperar objetos de fichero usando un bucle:
Lo más normal es que queramos recuperar todos los objetos de un fichero y que no sepamos cuántos objetos hay guardados en él.
Para hacerlo haremos un bucle que extraiga todos los ficheros y, gracias a la excepción de final de fichero EOFException, controlaremos la salida del bucle.
El siguiente código recupera los objetos vehículo del fichero y los guarda en una matriz de objetos vehículo llamada listaVehiculos, al finalizar recorremos el bucle para mostrar los datos de todos los objetos.
listaVehiculos = []
with open("vehiculos.pickle","rb") as fichero:
try:
while True:
listaVehiculos.append(pickle.load(fichero))
except EOFError:
pass
for v in listaVehiculos:
v.descripcion()