2010-10-06 9 views
10

J'ai un fichier dans lequel j'ai jeté un grand nombre de listes.Maintenant, je veux charger ce fichier en mémoire et utiliser les données à l'intérieur.J'ai essayé de charger mon fichier en utilisant la méthode "charger" de "pickle", Cependant, pour une raison quelconque, il me donne juste le premier élément dans le fichier. En fait, j'ai remarqué qu'il ne charge que ma première liste en mémoire et si je veux charger mon fichier entier (un certain nombre de listes) alors je dois itérer sur mon fichier et utiliser "pickle.load (filename)" dans chacun des itérations je prends. Le problème est que je ne sais pas comment l'implémenter réellement avec une boucle (pour ou pendant), car je ne sais pas quand j'atteins la fin de mon fichier. un exemple m'aiderait beaucoup. grâceLecture à partir d'un fichier en utilisant pickle et pour la boucle en python

Répondre

9

Que diriez-vous ceci:

lists = [] 
infile = open('yourfilename.pickle', 'r') 
while 1: 
    try: 
     lists.append(pickle.load(infile)) 
    except (EOFError, UnpicklingError): 
     break 
infile.close() 
+2

Vous devez utiliser __never__ 'sauf:'; spécifiez toujours l'exception que vous essayez d'intercepter (par exemple 'excepté PicklingError:'). En outre, l'idiome Python pour les boucles infinies est 'while 1', bien que ce soit nitpicky =). – katrielalex

+0

@katrielalex - vous avez raison, je l'ai réparé. @ Hossein - J'ai maintenant testé les erreurs possibles, donc s'il vous plaît, si cela soulève une erreur autre que EOFError et UnpicklingError, ajoutez-le à la liste. – eumiro

+4

Modern Python devrait utiliser 'while True' pour les boucles infinies. 'while 1' a été utilisé dans le code Python qui précède le PEP 285, qui a ajouté' True' au langage. –

Questions connexes