Comparar y extraer

Arnau Sanchez pyarnau en gmail.com
Mar Jun 24 01:05:10 CEST 2008


Pepe Aracil escribió:

>> Te pongo una versión rápida de todo lo dicho:
>>
>> palabras=(w for w in file("fichero_1.txt"))
>> file("fichero_final","w").writelines( linea for linea in
>> file("fichero_2.txt") if any(w for w in palabras if w in linea))
> 
> 
> Creo que hay que añadir un strip() para quitar los "\n"
> y que la busqueda en el fichero_2 funcione.
> 
> palabras=(w.strip() for w in file("fichero_1.txt"))

Correcto, pero además hay que crear una lista en vez de un generador, ya que 
éste se agota a las primeras de cambio.

Se podría explorar otro camino usando expresiones regulares, es de esperar que 
sea más rápido:

import re
words = ("%s\\b" % s.strip() for s in open("fichero_1.txt"))
wordsre = re.compile("|".join(words))
output = (line for line in open("fichero_2.txt") if wordsre.match(line))

Y otra forma más rápida, desde el terminal:

grep -w -f fichero_1.txt fichero_2.txt
_______________________________________________
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