Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

M贸dulo pickle

Este m贸dulo nos permite almacenar f谩cilmente colecciones y objetos en ficheros binarios abstrayendo todo la parte de escritura y lectura binaria.

Escritura de colecciones

Note

import pickle

# Podemos guardar lo que queramos, listas, diccionarios, tuplas...
lista = [1,2,3,4,5]

# Escritura en modo binario, vac铆a el fichero si existe
fichero = open('lista.pckl','wb')

# Escribe la colecci贸n en el fichero 
pickle.dump(lista, fichero) 

fichero.close()

Lectura de colecciones

Note

# Lectura en modo binario 
fichero = open('lista.pckl','rb') 

# Cargamos los datos del fichero
lista_fichero = pickle.load(fichero)
print(lista_fichero)

fichero.close()
[1, 2, 3, 4, 5]

Persistencia de objetos

Para guardar objetos lo haremos dentro de una colecci贸n. La l贸gica ser铆a la siguiente:

  1. Crear una colecci贸n.
  2. Introducir los objetos en la colecci贸n.
  3. Guardar la colecci贸n haciendo un dump.
  4. Recuperar la colecci贸n haciendo un load.
  5. Seguir trabajando con nuestros objetos.

Note

# Creamos una clase de prueba
class Persona:

    def __init__(self,nombre):
        self.nombre = nombre

    def __str__(self):
        return self.nombre

# Creamos la lista con los objetos
nombres = ["H茅ctor","Mario","Marta"]
personas = []

for n in nombres:
    p = Persona(n)
    personas.append(p)

# Escribimos la lista en el fichero con pickle
import pickle
f = open('personas.pckl','wb')
pickle.dump(personas, f)
f.close()

# Leemos la lista del fichero con pickle
f = open('personas.pckl','rb')
personas = pickle.load(f)
f.close()

for p in personas:
    print(p)
H茅ctor
Mario
Marta

Ejemplo cat谩logo de pel铆culas

A continuaci贸n os dejo un ejemplo para que ve谩is como adaptar un cat谩logo de pel铆culas para usar persistencia utilizando pickle:

Note

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

El uso de las clases no tendr铆a mucha complicaci贸n:

Note

# Creamos un cat谩logo
c = Catalogo()

# Mostramos el contenido
c.mostrar()

# Agregamos unas pel铆culas
c.agregar( Pelicula("El Padrino", 175, 1972) )
c.agregar( Pelicula("El Padrino: Parte 2", 202, 1974) )

# Mostramos el cat谩logo de nuevo
c.mostrar()

# Borramos el cat谩logo de la memoria ram (persistir谩 el fichero)
del(c)
El fichero est谩 vac铆o
Se han cargado 0 pel铆culas

El cat谩logo est谩 vac铆o

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

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

Ahora al crear de nuevo un cat谩logo se recuperar谩n los datos del fichero y podr铆amos seguir trabajando con 茅l:

Note

# Creamos un cat谩logo
c = Catalogo()

# Mostramos el contenido
c.mostrar()

# Agregamos una pel铆cula
c.agregar( Pelicula("Prueba", 100, 2005) )

# Mostramos el cat谩logo de nuevo
c.mostrar()
Se han cargado 2 pel铆culas

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

Se ha creado la pel铆cula: Prueba

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

En conclusi贸n podr铆amos decir que en realidad estamos volcando los datos del fichero a la memoria RAM y los manipulamos ah铆.


脷ltima edici贸n: 3 de Octubre de 2018