with read files extension current python iteration file-type

read - Iterar en un archivo usando Python



python read file (4)

A medida que el objeto de archivo lee el archivo, utiliza un puntero para realizar un seguimiento de dónde se encuentra. Si lees parte del archivo, luego vuelve y luego continuará donde lo dejaste. Si lee el archivo completo y vuelve al mismo objeto de archivo, será como leer un archivo vacío porque el puntero se encuentra al final del archivo y no queda nada por leer. Puede usar file.tell() para ver en qué parte del archivo se encuentra el puntero y file.seek para establecer el puntero. Por ejemplo:

>>> file = open(''myfile.txt'') >>> file.tell() 0 >>> file.readline() ''one/n'' >>> file.tell() 4L >>> file.readline() ''2/n'' >>> file.tell() 6L >>> file.seek(4) >>> file.readline() ''2/n''

Además, debe saber que file.readlines() lee el archivo completo y lo almacena como una lista. Eso es útil saber porque puedes reemplazar:

for line in file.readlines(): #do stuff file.seek(0) for line in file.readlines(): #do more stuff

con:

lines = file.readlines() for each_line in lines: #do stuff for each_line in lines: #do more stuff

También puede iterar sobre un archivo, una línea a la vez, sin tener todo el archivo en la memoria (esto puede ser muy útil para archivos muy grandes) haciendo:

for line in file: #do stuff

Tengo un problema para entender iterar en un archivo. Aquí voy lo que escribo sobre el intérprete y el resultado:

>>> f = open(''baby1990.html'', ''rU'') >>> for line in f.readlines(): >>> print(line) >>> ... >>> ... all the lines from the file appear here >>> ...

Cuando intento iterar en el mismo archivo abierto otra vez, ¡no tengo nada!

>>> f = open(''baby1990.html'', ''rU'') >>> for line in f.readlines(): >>> print(line) >>> >>>

No hay salida en absoluto, para resolver esto tengo que cerrar () el archivo y luego abrirlo nuevamente para leerlo. ¿Es eso un comportamiento normal?


El objeto de archivo es un buffer . Cuando lee desde el búfer, la porción que lee se consume (la posición de lectura se desplaza hacia adelante). Cuando lee todo el archivo, la posición de lectura está en el EOF, por lo que no devuelve nada porque no queda nada por leer.

Si, por alguna razón, tiene que restablecer la posición de lectura en un objeto de archivo, puede hacer lo siguiente:

f.seek(0)


Por supuesto. Ese es un comportamiento normal y sano. En lugar de cerrar y volver a abrir, puede rewind el archivo.


Sí, eso es comportamiento normal. Básicamente, lee hasta el final del archivo la primera vez (puede f.seek(0) si f.seek(0) leyendo una cinta), por lo que no puede leer más a menos que lo reinicie, ya sea usando f.seek(0) para reposicione al inicio del archivo, o para cerrarlo y luego ábralo de nuevo, que comenzará desde el principio del archivo.

Si lo prefiere, puede usar la sintaxis with que cerrará automáticamente el archivo por usted.

p.ej,

with open(''baby1990.html'', ''rU'') as f: for line in f: print line

Una vez que este bloque se termina de ejecutar, el archivo se cierra automáticamente, por lo que puede ejecutar este bloque repetidamente sin cerrarlo explícitamente y leer el archivo de esta manera.