Dungeon of Bits
Aprendiendo informática.
Dungeon of Bits

Guardar y recuperar objetos desde fichero con Python

En este tutorial guardaremos objetos de Python a fichero y los recuperaremos.

Python

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()