2013-03-24 18 views
5

Ho precedentemente creato uno list e l'ho salvato in un file "mylist.txt". Tuttavia, quando lo leggo è una stringa, il che significa che non posso accedere ad ogni elemento come preferisco. Ho cercato e cercando modi per risolvere questo problema, ma senza risultato.Python - legge una precedente variabile "elenco" dal file

Nel documento di testo, la lista è una riga e appare come:

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

in modo che, se questa lista è stato pari a mylist, ho potuto fare

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

ecc

Quanto sopra è utile per me, ma la lettura nell'elenco ha il seguente effetto:

>>>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'" 

ecc. So che il formato di mylist è negativo, ma funziona per quello che voglio e ci è voluto molto tempo per generarlo. Ho provato semplicemente a copiare l'elenco in python come mylist = <paste>, ma l'elenco è troppo lungo e ricevo un errore di memoria.

Esiste un modo per leggere il file e utilizzarlo come list in modo che sia possibile accedere a ciascun elemento come normale (ad esempio, come illustrato nelle precedenti istruzioni di stampa sopra)?

Grazie molto

risposta

13

passare la stringa di ast.literal_eval. Analizzerà in modo sicuro la stringa nelle strutture appropriate:

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

Questo ha funzionato perfettamente! Grazie mille, questo mi ha fatto venire un mal di testa. Considera questo "risolto"! –

0

Deve essere un file di testo nella tua app? Supponendo di averlo formattato correttamente come un elenco Python, puoi trasformarlo in codice Python invece che in testo. Rinominare il file mylist.py e in primo piano aggiungere un compito come mylist = [xxx].

All'interno dello script Python che richiede l'accesso a questo elenco è possibile importarlo come from .mylist import mylist che ti consentirà di svolgere il tuo lavoro (ad esempio mylist[0] ecc.).

L'importazione precedente presuppone che lo mylist.py e lo script Python siano nello stesso modulo (la stessa directory con un file __init__.py al suo interno). Se questo non ti è chiaro (dai uno sguardo a Python modules) copia semplicemente l'intero elenco nello stesso file del tuo script e fai invece l'assegnazione nella parte superiore dello stesso file.

+0

Grazie per il commento e le informazioni. Non deve essere un file .txt, tuttavia trovo la risposta di @icktoofay più utile e userò quel metodo in questa particolare istanza. –

Problemi correlati