2010-01-21 11 views
30

Dire che ho questo semplice script python:Riapre i file in Python?

file = open('C:\\some_text.txt') 
print file.readlines() 
print file.readlines() 

Quando viene eseguito, la prima stampa stampa una lista che contiene il testo del file, mentre il secondo di stampa stampa un elenco vuoto. Non completamente inaspettato, credo. Ma c'è un modo per "riavvolgere" il file in modo che io possa leggerlo di nuovo? O è il modo più veloce per riaprirlo?

+1

Si potrebbe provare 'file.close()' e '' open' vs. file.seek' e riferire in merito quello che hai imparato. Quindi potremmo commentare i risultati. –

+1

Hey c00kiemonster! Se la risposta di Alok risponde alla tua domanda, premi il segno di spunta a sinistra della sua risposta. Questo lo definisce "la risposta giusta", quindi altre persone in futuro sapranno che funziona. Inoltre ti dà punti reputazione extra :-) – Smashery

+1

Ho eseguito un test rapido su un file 170k, ed era praticamente lo stesso, pochi millisecondi ciascuno. – c00kiemonster

risposta

65

È possibile ripristinare il puntatore del file chiamando seek():

file.seek(0) 

lo farà. Hai bisogno di quella linea dopo il tuo primo readlines(). Notare che file deve supportare l'accesso casuale affinché funzioni sopra.

+1

Fantastico. Mi ricorda il buon vecchio sbirciatina e colpisci le cose con il venerabile C64! – c00kiemonster

+0

Penso che sia l'interfaccia POSIX standard. –

+0

@Stefano: Penso che tu abbia ragione. 'seek()' degli oggetti file in Python è molto probabilmente un involucro sottile attorno a 'fseek()' o simile. –

3

Per file di piccole dimensioni, probabilmente è molto più veloce di tenere solo il contenuto del file in memoria

file = open('C:\\some_text.txt') 
fileContents = file.readlines() 
print fileContents 
print fileContents # This line will work as well. 

Naturalmente, se si tratta di un grosso file, questo potrebbe mettere a dura prova il vostro RAM.

3

Ricordatevi che potete sempre usare l'istruzione with per aprire e chiudere i file:

from __future__ import with_statement 

with open('C:\\some_text.txt') as file: 
    data = file.readlines() 
#File is now closed 
for line in data: 
    print line 
Problemi correlati