[Python-es] Concatenar archivos de texto

Chema Cortes pych3m4 en gmail.com
Lun Jul 7 13:57:22 CEST 2008


El día 4 de julio de 2008 17:07, Christian Huelmo
<chuelmo en montevideo.com.uy> escribió:
> Chema Cortes escribió:
>>
>> No entiendo bien si te parece mal la lectura línea por línea por algún
>> motivo, pero yo lo haría usando iteradores para así optimizar el uso
>> de la memoria:
>>
>> from itertools import chain
>>
>> file("resultado.txt","w").writelines(chain(
>>  file("fichero1.txt"),file("fichero2.txt"),file("fichero3.txt")
>> ))
>>
>
> #!/bin/bash
> # Necesito concatenar todos los archivos de una carpeta
> # la cantidad y los nombres de los archivos varían
>
> archivos="cat "
> for i in *;do
>   if [ $i != $0 ];then   # para que no me agregue el propio script
>       archivos=${archivos}" "$i
>   fi
> done
> $archivos > marcas.txt
>
> No se nada de bash pero así lo tengo resuelto y me anda,
> usando python quiero resolver lo mismo en windows.
> Estoy mirando tu solución Chema y todavía no me doy idea
> como adaptarla.

Entiendo que buscas una solución para windows. Antes de complicarnos
más, deberías considerar una solución "clásica":

TYPE * > RESULTADO.TXT


Para hacerlo con python, y combinando varias de las propuestas que se
han visto ya, aquí va una más:

import sys
from glob import iglob
from fileinput import fileinput

ficheros=(fich for fich in iglob("*") if fich<>sys.argv[0])
file("resultado.txt","w").writelines(fileinput.input(ficheros))


En iglob se puede filtrar para, por ejemplo, sólo considerar algún
tipo de fichero (eg: iglob("*.txt") )


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