[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