2010-01-21 18 views
30

Decir que tengo este sencillo script en Python:¿Volver a abrir archivos en Python?

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

Cuando se ejecuta, la primera impresión imprime una lista que contiene el texto del archivo, mientras que la segunda impresión imprime una lista en blanco. No del todo inesperado, supongo. Pero, ¿hay alguna forma de "recuperar" el archivo para poder leerlo nuevamente? ¿O es la forma más rápida de volver a abrirlo?

+1

usted podría intentar 'file.close()' y '' open' vs file.seek' e informar sobre que has aprendido. Entonces podríamos comentar tus resultados. –

+1

¡Hola, c00kiemonster! Si la respuesta de Alok responde a su pregunta, presione la marca a la izquierda de su respuesta. Esto lo señala como "la respuesta correcta" para que otras personas en el futuro sepan que funciona. Además, le da puntos de reputación adicionales :-) – Smashery

+1

Ejecuté una prueba rápida en un archivo de 170k, y fue prácticamente el mismo tiempo, unos pocos milisegundos cada uno. – c00kiemonster

Respuesta

65

Puede restablecer el puntero de archivo llamando seek():

file.seek(0) 

lo hará. Necesitas esa línea después de tu primera readlines(). Tenga en cuenta que file tiene que admitir acceso aleatorio para que lo anterior funcione.

+1

Impresionante. ¡Me recuerda a las buenas cosas de curiosear y meter con el venerable C64! – c00kiemonster

+0

Creo que es una interfaz POSIX estándar. –

+0

@Stefano: creo que tienes razón. 'seek()' de objetos de archivo en Python es muy probablemente un envoltorio delicado alrededor de 'fseek()' o similar. –

3

los archivos pequeños, probablemente es mucho más rápido sólo para mantener el contenido del archivo en la memoria

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

Por supuesto, si se trata de un archivo grande, esto podría poner la tensión en la memoria RAM.

3

Recuerde que siempre puede utilizar la sentencia with para abrir y cerrar archivos:

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 
Cuestiones relacionadas