2010-10-06 10 views
10

Ho un file in cui ho scaricato un numero enorme di liste. Adesso voglio caricare questo file in memoria e utilizzare i dati al suo interno. Ho provato a caricare il mio file usando il metodo "load" di "pickle", tuttavia, per qualche motivo, mi dà solo il primo elemento nel file. in realtà ho notato che carica solo la mia prima lista in memoria e se voglio caricare tutto il mio file (un certo numero di liste) allora devo scorrere il mio file e usare "pickle.load (nomefile)" in ognuna delle iterazioni che prendo. Il problema è che non so come effettivamente implementarlo con un ciclo (per o mentre), perché non so quando raggiungo la fine del mio file. un esempio mi aiuterebbe molto. grazieLettura da un file usando pickle e per loop in python

risposta

9

ne dite di questo:

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

Si dovrebbe __never__ uso 'eccezione:'; specifica sempre l'eccezione che stai cercando di catturare (ad esempio "ad eccezione di PicklingError:"). Inoltre, l'idioma Python per loop infiniti è 'while 1', anche se è nitpicky =). – katrielalex

+0

@katrielalex - hai ragione, l'ho risolto. @Hossein - Ora ho testato gli errori possibili, quindi per favore se solleva qualsiasi altro errore di EOFError e UnpicklingError, aggiungilo alla lista. – eumiro

+4

Modern Python dovrebbe usare 'while True' per cicli infiniti. 'while 1' è stato utilizzato nel codice Python che precede PEP 285, che ha aggiunto' True' alla lingua. –