Programación Web y Scripting > Python

 Recuperar datos de archivo usando Pickle

(1/1)

programadornoob:
Hola amigo soy nuevo en el mundo de python y en la programación, estoy terminando un trabajo esta casi listo solo me falta poder recuperar los datos que guardo en un archivo y guardarlos en una lista espero me puedan guiar.

Bueno el programa guarda en una lista frutas con el nombre, color y peso, antes de terminar los guarda en un archivo llamado frutas2.dat, hasta aca todo bien el problema es que al volver ejecutar el programa no recupera los datos que estan en el archivo  :hitcomp: , aca les dejo el codigo:


--- Código: Python ---try:      import cPickle as pickle  except ImportError:      import pickle   class Fruta:    def __init__(self, nombre, color, peso):        self.nombre = nombre        self.color = color        self.peso = peso     def __str__(self):        return "%s %s %s" % (self.nombre, self.color, self.peso) archivo = file("frutas2.dat", "a+") #aca abre o crea el archivo si no existe lista_de_frutas = []    #crea la lista #====================================================================================for fruta in lista_de_frutas:    pickle.load(archivo)    #se supone que carga el archivo si es que tiene contenidoarchivo.close()#==================================================================================== #====================================================================================printprint "Lista de frutas".center(79, "#") #Muestra si tiene contenido recuperadofor fruta in lista_de_frutas:    print "Nombre: %snColor: %snPeso: %s" % (fruta.nombre, fruta.color, fruta.peso)    print ""print "".center(79, "#")print#==================================================================================== while True:    nombre = raw_input("Nombre: ")    color = raw_input("Color: ")    peso = raw_input("Peso: ")    fruta = Fruta(nombre, color, peso)        lista_de_frutas.append(fruta)        s = raw_input("Desea continuar [S/n]: ")     if not s:        continue    elif s[0] == 's' or s[0] == 'S':        continue    else:        break for fruta in lista_de_frutas:    pickle.dump(fruta, archivo)archivo.close()  printprint "Lista de frutas".center(79, "#")for fruta in lista_de_frutas:    print "Nombre: %snColor: %snPeso: %s" % (fruta.nombre, fruta.color, fruta.peso)    print ""  
Saludos

rive08:
Buen día programadornoob,

Yo tampoco la tengo muy clara con python todavía, per creo entender lo que estás queriendo hacer.
En mi humilde opinión, en vez de hacer:


--- Código: Python ---#for fruta in lista_de_frutas:#    pickle.load(archivo)    #se supone que carga el archivo si es que tiene contenido#archivo.close() 
Podrías hacerlo de esta manera:

--- Código: Python ---archivo = file("frutas2.dat", "a+") #aca abre o crea el archivo si no existelista_de_frutas = []    #crea la lista while True:    try:        lista_de_frutas.append(pickle.load(archivo))    except EOFError:        breakarchivo.close() 
Ahh. .también tendrías que tener en cuenta al hacer:

--- Código: Python ---for fruta in lista_de_frutas:    pickle.dump(fruta, archivo)archivo.close() Que primero debes ABRIR el archivo, ya que al terminar de leerlo lo estás cerrando.

Espero mi respuesta te ayude, o por lo menos te sirva para buscar la solución a tu problema.

Saludos,
Rive

Navegación

[0] Índice de Mensajes

Ir a la versión completa