Prima di tutto, grazie per le risposte; come ho detto all'inizio sono ancora nuovo nel mondo della programmazione ma soprattutto in python; i codici che mi hai scritto non li capisco molto, ma vedrò di studiarmeli per bene oggi, solo una cosa, originariamente il programma che volevo fare doveva trovare la posizione di 2 parole chiave (.jpg e http) in un testo HTML, per poi salvarmi in un altro file .txt tutti i link delle foto ( http://www.sito.it/foto.jpg ) e quindi creare una sorta di "backup" dei link, sapendo questo, il mio programma finale cambia di molto o basta aggiungerci seek(posizione_http) link=f.read(posizione_.jpg-posizione_http) print link ? > To: python@lists.python.it > From: ricca...@reflab.com > Date: Thu, 13 Oct 2011 20:03:23 +0200 > Subject: Re: [Python] trovare parole su file txt > > 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
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python