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 _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python