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
Publicar un comentario