[Python-es] Buscar palabras en un archivo
Flavio Danesse
fdanesse en gmail.com
Lun Jun 9 22:08:28 CEST 2014
Si abres el archivo y lo lees, pasandole su contenido a una variable, esa
variable será de tipo string.
Y los objetos string tienen una función llamada *find*
*find(s, *args)*
*rfind(s, sub [,start [,end]]) -> in*
Return the lowest index in s where substring sub is found,
such that sub is contained within s[start,end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
El 8 de junio de 2014, 16:48, Chema Cortes <pych3m4 en gmail.com> escribió:
> El 8 de junio de 2014, 12:05, ruben linux <rubia.linux en gmail.com>
> escribió:
>
> Saludos a todos, este es mi primer correo a la lista.
>>
>> Estoy empezando con Python, y este me pareció un buen sitio para empezar
>> y aprender. Decirnos antes de nada que este tema ya se lo busque en Google,
>> y no doy con la respuesta adecuada, o la que me soluciona el problema.
>>
>> Como parte de mi aprendizaje, me he propuesto hacer un suripanta que
>> busque palabras en un archivo, esta palabras están en otro archivo. Os dejo
>> un trozo del código
>> ...
>> for line in file (a, 'r')
>> if palabra in líne:
>> print line
>>
>> palabra es una función que lee el archivo fuente, donde se encuentran las
>> palabras que quiero buscar. Esté el el fallo que me devuelve:
>>
>> TypeError: 'in <string>' requires string as left operand! nota file
>>
>
> Según este error, 'palabra' es un 'file' (fichero), no una función.pyth
>
>
>>
>> Entiendo que no le puedo pasar a if un archivo, ni una función, sólo
>> palabras, y eso es lo que no se hacer. Necesito qué me guíen.
>>
>
> A un if hay que pasarle una expresión que se evalúe a true o false. El
> problema es que tienes que comparar contenidos comparables, una cadena
> dentro de otra cadena, o un elemento dentro de una lista.
>
>
>>
>> Tal vez usando listas... En tal caso cual es el tamaño máximo de una
>> lista???.
>>
>
>
> Puedes usar listas y su tamaño es ilimitado. Pero no te aconsejo que
> intentes llenar la memoria con una lista. Para estas cosas es mejor usar
> "iteradores" y sólo cargar en memoria los datos de un conjunto de datos con
> los que vayas a operar.
>
> Por ejemplo, los objetos ficheros se definen como iteradores. Para saber
> si una palabra está en un fichero:
>
> with open("fichero.txt") as f:
> for line in f:
> if palabra in line:
> print "Encontrada"
>
> El fichero puede contener Gigas o Teras de información, pero sólo se
> necesita la memoria suficiente para cargar una línea de texto.
>
> Con algo más de experiencia, se puede hacer cosas más sofisticadas con los
> iteradores:
>
> def allseen(words):
> state = set(words)
> def _aux(lst):
> state -= set(lst)
> return not bool(state) # have seen all the words?
> return _aux
>
> allfounds = allseen(words) # 'allfounds' is a function
> encontrada = any( allfounds(word for word in words if word in line) for
> line in open("fichero.txt"))
>
> La expresión es verdadera si todas las palabras de la lista "words"
> existen en el fichero.
>
> Además, no es necesario procesar el resto del fichero si se encuentran
> todas las palabras. En el momento que "allfounds" devuelve el primer true,
> la función "any" retorna true y se para todo el proceso.
>
>
>
> PD: no te agobies si no entiendes nada ahora mismo. Que se pueda hacer no
> quiere decir que todo el mundo lo haga así. Hazlo del modo que mejor
> comprendas y pregunta lo que te surga.
>
>
>
>
>
>>
>> Gracias a todos.
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
>
> --
> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
> Buscador Python Hispano: http://ch3m4.org/python-es
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140609/b537658a/attachment.html>
Más información sobre la lista de distribución Python-es