<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">El 16 de junio de 2014, 8:29, ruben linux <span dir="ltr"><<a href="mailto:rubia.linux@gmail.com" target="_blank">rubia.linux@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">El proposito de este programa es buscar palabras dentro de un archivo,<br>
pasandole como argumento otro archivo que contiene una lista de<br>
palabras.<br>
<br>
Funciona a medias, me explico!!! solo lee la primera palabra de cada linea.<br>
<br>
Por ejemplo, supongamos esta linea: "uno, dos, tres, cuatro,..." y en<br>
el archivo de palabras, las tengo todas pero, solo me encuentra la<br>
primera.<br>
<br>
Por que?????<br>
<br>
Eso es lo que necesito saber.<br>
<br>
Os dejo el codigo, y asi lo entendereis mejor.<br>
<br>
#!/usr/bin/env python<br>
<br>
import os,argparse<br>
<br>
# Argumentos<br>
parser = argparse.ArgumentParser(description='busca las cadenas de<br>
archivo1 en archivo2')<br>
parser.add_argument('-a','--archivo1', help='archvio contine cadenas',<br>
required=True)<br>
parser.add_argument('-A','--archivo2', help='archivo en el que<br>
buscamos', required=True)<br>
args = parser.parse_args()<br>
<br>
file1 = args.archivo1<br>
file2 = args.archivo2<br>
<br>
try:<br>
        # Abro el archivo 1<br>
        archivo1 = open(file1,'r')<br>
        # Leo todo el archivo1<br>
        lee1 = archivo1.readlines()<br></blockquote><div><br></div><div>Ten en cuenta que "readlines" lee líneas completas, añadiendo un '\n' al final que tendrías que quitar. Lo extraño es que encuentres alguna palabra.<br>
</div><div><br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
        for i in lee1:<br>
                # Abro archivo 2<br>
                archivo2 = open(file2,'r')<br>
                # Leo completamente el archivo2<br>
                lee2 = archivo2.read()<br>
                # -1 no esta, distinto de -1, si esta<br>
                if lee2.find(i) != -1:<br>
                        # Muestra coincidencias<br>
                        print i<br>
<br>
                archivo2.close()<br>
<br>
        archivo1.close()<br>
<br>
except IOError:<br>
 print 'El archivo indicado no existe'<br>
<br>
<br>
El 9/6/14, Flavio Danesse <<a href="mailto:fdanesse@gmail.com">fdanesse@gmail.com</a>> escribió:<br>
<div class="">> Si abres el archivo y lo lees, pasandole su contenido a una variable, esa<br>
> variable será de tipo string.<br>
</div>> Y los objetos string tienen una función llamada *find*<br>
><br>
> *find(s, *args)*<br>
><br>
> *rfind(s, sub [,start [,end]]) -> in*<br>
<div class="HOEnZb"><div class="h5">><br>
><br>
><br>
> Return the lowest index in s where substring sub is found,<br>
> such that sub is contained within s[start,end].  Optional<br>
> arguments start and end are interpreted as in slice notation.<br>
><br>
> Return -1 on failure.<br>
><br>
><br>
><br>
> El 8 de junio de 2014, 16:48, Chema Cortes <<a href="mailto:pych3m4@gmail.com">pych3m4@gmail.com</a>> escribió:<br>
><br>
>> El 8 de junio de 2014, 12:05, ruben linux <<a href="mailto:rubia.linux@gmail.com">rubia.linux@gmail.com</a>><br>
>> escribió:<br>
>><br>
>> Saludos a todos, este es mi primer correo a la lista.<br>
>>><br>
>>> Estoy empezando con Python, y este me pareció un buen sitio para empezar<br>
>>> y aprender. Decirnos antes de nada que este tema ya se lo busque en<br>
>>> Google,<br>
>>> y no doy con la respuesta adecuada, o la que me soluciona el problema.<br>
>>><br>
>>> Como parte de mi aprendizaje, me he propuesto hacer un suripanta que<br>
>>> busque palabras en un archivo, esta palabras están en otro archivo. Os<br>
>>> dejo<br>
>>> un trozo del código<br>
>>> ...<br>
>>> for line in file (a, 'r')<br>
>>>       if palabra in líne:<br>
>>>              print line<br>
>>><br>
>>> palabra es una función que lee el archivo fuente, donde se encuentran<br>
>>> las<br>
>>> palabras que quiero buscar. Esté el el fallo que me devuelve:<br>
>>><br>
>>>    TypeError: 'in <string>' requires string as left operand! nota file<br>
>>><br>
>><br>
>> Según este error, 'palabra' es un 'file' (fichero), no una función.pyth<br>
>><br>
>><br>
>>><br>
>>> Entiendo que no le puedo pasar a if un archivo, ni una función, sólo<br>
>>> palabras, y eso es lo que no se hacer. Necesito qué me guíen.<br>
>>><br>
>><br>
>> A un if hay que pasarle una expresión que se evalúe a true o false. El<br>
>> problema es que tienes que comparar contenidos comparables, una cadena<br>
>> dentro de otra cadena, o un elemento dentro de una lista.<br>
>><br>
>><br>
>>><br>
>>> Tal vez usando listas... En tal caso cual es el tamaño máximo de una<br>
>>> lista???.<br>
>>><br>
>><br>
>><br>
>> Puedes usar listas y su tamaño es ilimitado. Pero no te aconsejo que<br>
>> intentes llenar la memoria con una lista. Para estas cosas es mejor usar<br>
>> "iteradores" y sólo cargar en memoria los datos de un conjunto de datos<br>
>> con<br>
>> los que vayas a operar.<br>
>><br>
>> Por ejemplo, los objetos ficheros se definen como iteradores. Para saber<br>
>> si una palabra está en un fichero:<br>
>><br>
>> with open("fichero.txt") as f:<br>
>>    for line in f:<br>
>>       if palabra in line:<br>
>>           print "Encontrada"<br>
>><br>
>> El fichero puede contener Gigas o Teras de información, pero sólo se<br>
>> necesita la memoria suficiente para cargar una línea de texto.<br>
>><br>
>> Con algo más de experiencia, se puede hacer cosas más sofisticadas con<br>
>> los<br>
>> iteradores:<br>
>><br>
>> def allseen(words):<br>
>>    state = set(words)<br>
>>    def _aux(lst):<br>
>>        state -= set(lst)<br>
>>        return not bool(state)    # have seen all the words?<br>
>>    return _aux<br>
>><br>
>> allfounds = allseen(words)  # 'allfounds' is a function<br>
>> encontrada = any( allfounds(word for word in words if word in line) for<br>
>> line in open("fichero.txt"))<br>
>><br>
>> La expresión es verdadera si todas las palabras de la lista "words"<br>
>> existen en el fichero.<br>
>><br>
>> Además, no es necesario procesar el resto del fichero si se encuentran<br>
>> todas las palabras. En el momento que "allfounds" devuelve el primer<br>
>> true,<br>
>> la función "any" retorna true y se para todo el proceso.<br>
>><br>
>><br>
>><br>
>> PD: no te agobies si no entiendes nada ahora mismo. Que se pueda hacer no<br>
>> quiere decir que todo el mundo lo haga así. Hazlo del modo que mejor<br>
>> comprendas y pregunta lo que te surga.<br>
>><br>
>><br>
>><br>
>><br>
>><br>
>>><br>
>>> Gracias a todos.<br>
>>><br>
>>> _______________________________________________<br>
>>> Python-es mailing list<br>
>>> <a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
>>> <a href="https://mail.python.org/mailman/listinfo/python-es" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
>>> FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
>>><br>
>>><br>
>><br>
>><br>
>> --<br>
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":<br>
>> <a href="http://ch3m4.org/blog" target="_blank">http://ch3m4.org/blog</a><br>
>> Buscador Python Hispano: <a href="http://ch3m4.org/python-es" target="_blank">http://ch3m4.org/python-es</a><br>
>><br>
>> _______________________________________________<br>
>> Python-es mailing list<br>
>> <a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
>> <a href="https://mail.python.org/mailman/listinfo/python-es" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
>> FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
>><br>
>><br>
><br>
_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales": <a href="http://ch3m4.org/blog" target="_blank">http://ch3m4.org/blog</a><br>Buscador Python Hispano: <a href="http://ch3m4.org/python-es" target="_blank">http://ch3m4.org/python-es</a>
</div></div>