Python no lee todo el archivo de texto
Me encuentro con un problema que no he visto a nadie en el encuentro de StackOverflow o incluso google para el caso.
Mi objetivo principal es poder reemplazar las ocurrencias de una cadena en el archivo con otra cadena. ¿Hay alguna manera de poder acceder a todas las líneas del archivo?
El problema es que cuando intento leer en un archivo de texto grande (1-2 gb) de texto, python solo lee un subconjunto de él.
Por ejemplo, haré un comando realmente simple como:
newfile = open("newfile.txt","w")
f = open("filename.txt","r")
for line in f:
replaced = line.replace("string1", "string2")
newfile.write(replaced)
Y solo escribe los primeros 382 mb del archivo original. ¿Alguien ha encontrado este problema anteriormente?
Intenté algunas soluciones diferentes, como usar:
import fileinput
for i, line in enumerate(fileinput.input("filename.txt", inplace=1)
sys.stdout.write(line.replace("string1", "string2")
Pero tiene el mismo efecto. Tampoco leer el archivo en fragmentos como usar
f.read(10000)
Lo he reducido a un problema de lectura y no de escritura porque sucede simplemente por imprimir líneas. Sé que hay más líneas. Cuando lo abro en un editor de texto completo como Vim, puedo ver cuál debería ser la última línea, y no es la última línea que imprime Python.
¿Alguien puede ofrecer algún consejo o cosas para probar?
Actualmente estoy usando una versión de 32 bits de Windows XP con 3.25 gb de ram y ejecuto Python 2.7
* Editar solución encontrada (gracias Lattyware). Usando un iterador
def read_in_chunks(file, chunk_size=1000):
while True:
data = file.read(chunk_size)
if not data: break
yield data