Concatenar archivos de texto

Arnau Sanchez pyarnau en gmail.com
Mar Jul 1 19:23:20 CEST 2008


Pepe Aracil escribió:

> Así a grandes rasgos:
> 
> fa=file("ficheroA","r")
> fb=file("ficheroB","r")
> fc=file("ficheroC","w")
> 
> fc.write(fa.read())
> fc.frite(fb.read())

Sí, pero no será eficiente para ficheros muy grandes, ya que tendrá que 
cargarlos enteros en memoria.

Lo que propone Chema (iterar sobre líneas) es lo más simple. Si uno se empeña en 
hacerlo un poco más eficiente, se podrían leer los ficheros de entrada por 
bloques en vez de por líneas. Se me ocurre:

def iterfd(fd, buffersize=1024):
     while 1:
         data = fd.read(buffersize)
         if not data:
             break
         yield data

filenames = ["/etc/hosts", "/etc/environment"]
outfilename = "/tmp/out"

open(outfilename, "w").writelines(data for filename in filenames
     for data in iterfd(open(filename)))

La función "iterfd" se puede reescribir de forma muy compacta usando "iter" y el 
argumento centinela, pero el código no es tan claro:

def iterfd(fd, buffersize=1024):
     return iter(lambda: fd.read(buffersize), "")
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es