• Domingo 22 de Diciembre de 2024, 10:30

Autor Tema:  Recuperar datos de archivo usando Pickle  (Leído 1493 veces)

programadornoob

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Recuperar datos de archivo usando Pickle
« en: Sábado 10 de Julio de 2010, 16:58 »
0
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
  1. try:  
  2.     import cPickle as pickle  
  3. except ImportError:  
  4.     import pickle
  5.  
  6.  
  7. class Fruta:
  8.     def __init__(self, nombre, color, peso):
  9.         self.nombre = nombre
  10.         self.color = color
  11.         self.peso = peso
  12.  
  13.     def __str__(self):
  14.         return "%s %s %s" % (self.nombre, self.color, self.peso)
  15.  
  16. archivo = file("frutas2.dat", "a+") #aca abre o crea el archivo si no existe
  17.  
  18. lista_de_frutas = []    #crea la lista
  19.  
  20. #====================================================================================
  21. for fruta in lista_de_frutas:
  22.     pickle.load(archivo)    #se supone que carga el archivo si es que tiene contenido
  23. archivo.close()
  24. #====================================================================================
  25.  
  26. #====================================================================================
  27. print
  28. print "Lista de frutas".center(79, "#") #Muestra si tiene contenido recuperado
  29. for fruta in lista_de_frutas:
  30.     print "Nombre: %snColor: %snPeso: %s" % (fruta.nombre, fruta.color, fruta.peso)
  31.     print ""
  32. print "".center(79, "#")
  33. print
  34. #====================================================================================
  35.  
  36. while True:
  37.     nombre = raw_input("Nombre: ")
  38.     color = raw_input("Color: ")
  39.     peso = raw_input("Peso: ")
  40.     fruta = Fruta(nombre, color, peso)
  41.    
  42.     lista_de_frutas.append(fruta)
  43.    
  44.     s = raw_input("Desea continuar [S/n]: ")
  45.  
  46.     if not s:
  47.         continue
  48.     elif s[0] == 's' or s[0] == 'S':
  49.         continue
  50.     else:
  51.         break
  52.  
  53. for fruta in lista_de_frutas:
  54.     pickle.dump(fruta, archivo)
  55. archivo.close()
  56.  
  57.  
  58. print
  59. print "Lista de frutas".center(79, "#")
  60. for fruta in lista_de_frutas:
  61.     print "Nombre: %snColor: %snPeso: %s" % (fruta.nombre, fruta.color, fruta.peso)
  62.     print ""
  63.  
  64.  

Saludos

rive08

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Recuperar datos de archivo usando Pickle
« Respuesta #1 en: Miércoles 21 de Julio de 2010, 15:16 »
0
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
  1. #for fruta in lista_de_frutas:
  2. #    pickle.load(archivo)    #se supone que carga el archivo si es que tiene contenido
  3. #archivo.close()
  4.  

Podrías hacerlo de esta manera:
Código: Python
  1. archivo = file("frutas2.dat", "a+") #aca abre o crea el archivo si no existe
  2. lista_de_frutas = []    #crea la lista
  3. while True:
  4.     try:
  5.         lista_de_frutas.append(pickle.load(archivo))
  6.     except EOFError:
  7.         break
  8. archivo.close()
  9.  

Ahh. .también tendrías que tener en cuenta al hacer:
Código: Python
  1. for fruta in lista_de_frutas:
  2.     pickle.dump(fruta, archivo)
  3. archivo.close()
  4.  
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