Práctica

Catálogo de películas con ficheros y pickle


In [11]:
from io import open
import pickle

class Pelicula:
    
    # Constructor de clase
    def __init__(self, titulo, duracion, lanzamiento):
        self.titulo = titulo
        self.duracion = duracion
        self.lanzamiento = lanzamiento
        print('Se ha creado la película:',self.titulo)
        
    def __str__(self):
        return '{} ({})'.format(self.titulo, self.lanzamiento)


class Catalogo:
    
    peliculas = []
    
    # Constructor de clase
    def __init__(self):
        self.cargar()
        
    def agregar(self,p):
        self.peliculas.append(p)
        self.guardar()
        
    def mostrar(self):
        if len(self.peliculas) == 0:
            print("El catálogo está vacío")
            return
        for p in self.peliculas:
            print(p)
            
    def cargar(self):
        fichero = open('catalogo.pckl', 'ab+')
        fichero.seek(0)
        try:
            self.peliculas = pickle.load(fichero)
        except:
            print("El fichero está vacío")
        finally:
            fichero.close()
            del(fichero)
            print("Se han cargado {} películas".format( len(self.peliculas) ))
    
    def guardar(self):
        fichero = open('catalogo.pckl', 'wb')
        pickle.dump(self.peliculas, fichero)
        fichero.close()
        del(fichero)
    
    # Destructor de clase
    def __del__(self):
        self.guardar()  # guardado automático
        print("Se ha guardado el fichero")

In [5]:
c = Catalogo()


El fichero está vacío
Se han cargado 0 películas

In [6]:
c.mostrar()


El catálogo está vacío

In [7]:
c.agregar( Pelicula("El Padrino", 175, 1972) )


Se ha creado la película: El Padrino

In [8]:
c.agregar( Pelicula("El Padrino: Parte 2", 202, 1974) )


Se ha creado la película: El Padrino: Parte 2

In [9]:
c.mostrar()


El Padrino (1972)
El Padrino: Parte 2 (1974)

In [10]:
del(c)

Recuperando el catálogo al crearlo de nuevo


In [12]:
c = Catalogo()


Se han cargado 2 películas

In [13]:
c.mostrar()


El Padrino (1972)
El Padrino: Parte 2 (1974)

In [14]:
del(c)


Se ha guardado el fichero

In [15]:
c = Catalogo()


Se han cargado 2 películas

In [16]:
c.agregar( Pelicula("Prueba", 100, 2005) )


Se ha creado la película: Prueba

In [17]:
c.mostrar()


El Padrino (1972)
El Padrino: Parte 2 (1974)
Prueba (2005)

In [18]:
del(c)


Se ha guardado el fichero

In [19]:
c = Catalogo()


Se han cargado 3 películas

In [20]:
c.mostrar()


El Padrino (1972)
El Padrino: Parte 2 (1974)
Prueba (2005)

Conclusiones

  • Trabajamos en memoria, no en el fichero
  • Nosotros decidimos cuando escribir los datos:
    1. Al manipular un registro
    2. Al finalizar el programa