[Python] trovare parole su file txt
Riccardo Lemmi
riccardo a reflab.com
Gio 13 Ott 2011 20:03:23 CEST
simone s wrote:
>
> Salve a tutti, avrei un piccolo problema con python, premetto che sono ancora
> nuovo su python; sto cercando di creare un programma che cerca delle parole in
> un file .txt e restituisce la loro posizione; ho provato a scrivere un paio di
> righe, ma il problema è che entra in un ciclo infinito...ecco il codice che ho
> scritto:
Il problema non è il ciclo infinito: la prima cosa è imparare a pensare in
python :)
Dalla lettura del codice suppongo che tu voglia trovare la posizione del
carattere "a" all'interno del file.
> ---------------------
> import string
>
> f = open("prova.txt", "r")
> leggi = f.read()
Qui hai letto tutto il file e l'hai messo in leggi, quindi non avresti più
bisogno di usare il file.
> f.seek(0)
Qui riporti il cursore in testa, giustamente dato che hai letto già tutto con il
read precedente, ma avendo già i dati diventa un'operazione inutile.
> print leggi
> posizione = string.find(leggi, "a")
posizione = leggi.find("a")
> print posizione
> contatore = 0
> while posizione >= 0:
>
> if contatore == 0:
>
> f.seek(posizione)
> leggi = f.read(10)
> print leggi
> contatore = 2
>
> elif contatore != 0:
>
> f.seek(posizione+1)
> leggi = f.read()
> posizione = string.find(leggi, "a")
> print posizione
> f.seek(posizione+1)
> leggi = f.read(10)
> print leggi
>
> ---------------------------------
>
> ...spero che qualcuno riesca ad aiutarmi, ma soprattutto spero di essermi
> registrato correttamente alla mailing list XD
A dire il vero ci si perde in questo codice, la cosa più semplice penso che sia
una di queste versioni:
for i,c in enumerate(leggi):
if c=="a" : print i
#
print [i for i,c in enumerate(leggi) if c=="a"]
che non usano né il find né il while ma sfruttano il fatto che stai cercando un
solo carattere. Discorso diverso se vuoi trovare una stringa:
sstr = "sa"
lsstr = len(sstr)
pos = leggi.find(sstr)
print pos
while True:
new_pos = leggi.find(sstr, pos+lsstr)
if new_pos == -1:
break
else:
pos = new_pos
print pos
oppure
import re
expr = re.compile('sa')
for e in expr.finditer(leggi):
print e.start()
Diventa più complicato se vuoi usare il seek: fondamentalmente non conviene
usare il find ma estrarre un carattere alla volta dal file e confrontarlo con
quello che cerchi quindi stampare il valore del cursore. Stesso discorso per una
stringa ma in questo caso aggiungi il carattere in coda ad un buffer di
dimensione fissa.
--
Riccardo Lemmi
Maggiori informazioni sulla lista
Python