2010-10-06 9 views
10

Mam plik, w którym zrzuciłem ogromną liczbę list. Teraz chcę załadować ten plik do pamięci i użyć danych w nim. Próbowałem załadować mój plik przy użyciu metody "load" z "pickle", jednak z jakiegoś powodu daje mi tylko pierwszy element w pliku. faktycznie zauważyłem, że to tylko ładuje moją pierwszą listę do pamięci i jeśli chcę załadować cały mój plik (wiele list) to muszę przetestować mój plik i użyć "pickle.load (filename)" w każdym z iteracje, które biorę. Problem polega na tym, że nie wiem, jak to zaimplementować za pomocą pętli (przez jakiś czas), ponieważ nie wiem, kiedy dojdę do końca pliku. przykład bardzo mi pomógł. dziękiCzytanie z pliku za pomocą piklowania i pętli w pytonie

Odpowiedz

9

Jak o tym:

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

Należy __never__ użycie 'wyjątkiem:'; zawsze określ wyjątek, który próbujesz przechwycić (np. 'z wyjątkiem PicklingError:'). Ponadto, idiom Pythona dla nieskończonych pętli to 'while 1', ale to jest nitpicky =). – katrielalex

+0

@katrielalex - masz rację, naprawiłem to. @Hossein - Przetestowałem teraz możliwe błędy, więc jeśli pojawi się inny błąd niż EOFError i UnpicklingError, dodaj go do listy. – eumiro

+4

Nowoczesny Python powinien używać 'while while True' dla nieskończonych pętli. 'while 1' zostało użyte w kodzie Pythona, który poprzedza PEP 285, który dodał" True "do języka. –