2013-03-24 15 views
5

Poprzednio utworzyłem list i zapisałem do pliku "mylist.txt". Jednak gdy go przeczytam, jest to ciąg znaków, co oznacza, że ​​nie mam dostępu do każdego elementu, tak jak lubię. Próbowałem i szukałem sposobów, aby to naprawić, ale bezskutecznie.Python - wczytałem poprzednią zmienną "list" z pliku

W dokumencie tekstowym, lista jest jedna linia i wygląda mniej więcej tak:

[(['000', '001', '002'], ('010', '011', '012')), (['100', '101', '102'], ('110', '111', '112'))] 

tak, że jeśli ta lista była równa mylist mogłem zrobić

>>> print mylist[0] 
(['000', '001', '002'], ('010', '011', '012')) 
>>> print mylist[0][0] 
['000', '001', '002'] 
>>> print mylist[0][0][2] 
002 

itp

Powyższe przydaje się, ale odczyt na liście ma następujący efekt:

>>>myreadlist=open("mylist.txt",'r').read() 
>>>myreadlist 
"[(['000', '001', '002'], ('010', '011', '012')), (['100', '101', '102'], ('110', '111', '112'))]" 
>>>myreadlist[0] 
'[' 
>>>print myreadlist[0] 
[ 
>>>myreadlist[:15] 
"[(['000', '001'" 

itp. Wiem, że format mylist jest zły, ale działa na to, co chcę, a wygenerowanie go zajęło bardzo dużo czasu. Próbowałem po prostu skopiować-wklejając listę do python jak mylist = <paste>, ale lista jest o wiele za długa i pojawia się błąd pamięci.

Czy istnieje sposób na odczytanie pliku i użycie go jako list, dzięki czemu mogę uzyskać dostęp do każdego elementu w normalny sposób (tj. Jak pokazano w powyższych pierwszych instrukcjach drukowania)?

Dzięki bardzo

Odpowiedz

13

Przepuścić ciąg ast.literal_eval. Spowoduje to bezpieczne przeanalizowanie ciągu znaków w odpowiednich strukturach:

>>> import ast 
>>> with open("file.txt", 'r') as f: 
     data = ast.literal_eval(f.read()) 
>>> # You're done! 
+0

To działało idealnie! Dziękuję bardzo, to dawało mi taki ból głowy. Rozważ to "rozwiązane"! –

0

Czy musi to być plik tekstowy w Twojej aplikacji? Zakładając, że masz go poprawnie sformatowany jako listę w Pythonie, możesz zamienić go w kod Pythona zamiast w tekst. Zmień nazwę pliku mylist.py i na początku listy dodaj zadanie, takie jak mylist = [xxx].

W skrypcie w języku Python, który wymaga dostępu do tej listy, można go zaimportować tak, jak from .mylist import mylist, co umożliwi wykonywanie pracy (na przykład mylist[0] itp.).

Powyższy import zakłada, że ​​mylist.py i skrypt Python są w tym samym module (ten sam katalog z plikiem __init__.py w środku). Jeśli to nie jest dla ciebie jasne (spójrz na Python modules), po prostu skopiuj całą listę do tego samego pliku, co skrypt, i wykonaj zadanie na górze tego samego pliku.

+0

Dzięki za komentarz i informacje. Nie musi to być plik .txt, jednak najbardziej przydatna jest odpowiedź @icktoofay, która będzie używać tej metody w tym konkretnym przypadku. –