Almacenamiento de datos III. Serialización parte 2

Como hemos visto anteriormente es posible y muy conveniente guardar los objetos dentro de archivos para preservar la información en el tiempo. Ahora vamos a ver una manera mas completa de guardar la información de los objetos en un archivo binario:

import pickle
import os
os.system('cls')

class persona():
    def __init__(self,nombre,apellido,edad,sexo) -> None:
        self.nombre=nombre
        self.apellido=apellido
        self.edad = edad
        self.sexo=sexo
        print(100 *'_')
        print('Persona ',self.nombre,' ',self.apellido,' creada satisfactoriamente')
    def __str__(self) -> str:
        return 'Nombre: {}\nApellido: {}\nEdad: {}\nSexo: {}'.format(self.nombre,self.apellido,self.edad,self.sexo)

class ListaPersonas():
    lListaPersonas=[]
    def __init__(self) -> None:
        archivo_personas=open('archivo_personas.bin','ab+')
        archivo_personas.seek(0)
        try:
            self.lListaPersonas = pickle.load(archivo_personas)
            print('{} personas fueron cargadas exitosamente del archivo binario {}'.format(len(self.lListaPersonas),archivo_personas.name))
        except:
            print('El fichero esta vacío')
        finally:
            archivo_personas.close()
            del archivo_personas
    def AgregaPersonas(self,p):
        self.lListaPersonas.append(p)
        self.GuardarPersonasEnFichero()

    def GuardarPersonasEnFichero(self):
        archivo_personas = open('archivo_personas.bin','wb')
        pickle.dump(self.lListaPersonas,archivo_personas)
        archivo_personas.close()
        del archivo_personas
    def MostrarPersonasDeFichero(self):
        print(100 * '*')
        print('Contenido del archivo binario:')
        for p in self.lListaPersonas:
            print(p)
            print(100 * '_')
    def MuestraPersonas(self):        
        for p in self.personas:
            print(100 * '*')
            print(p)

listaPersonas01=ListaPersonas()
persona01=persona('César','Gamboa','49','M')
listaPersonas01.AgregaPersonas(persona01)
listaPersonas01.MostrarPersonasDeFichero()

Resultado:

El fichero esta vacío

____________________________________________________________________________________________________

Persona  César   Gamboa  creada satisfactoriamente

****************************************************************************************************

Contenido del archivo binario:

Nombre: César

Apellido: Gamboa

Edad: 49

Sexo: M

____________________________________________________________________________________________________

Como podemos comprobar la primera vez que se ejecuta el código da un aviso que el fichero binario esta vacio y por lo tanto no puede mostrar información alguna, sin embargo una vez creado y guardado el primer objeto muestra por pantalla la información recuperada del archivo binario.

Comentarios

Entradas populares