[Python] trovare parole su file txt

simone s simus89 a live.it
Ven 14 Ott 2011 09:23:05 CEST






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 a lists.python.it
> From: riccardo a 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 a lists.python.it
> http://lists.python.it/mailman/listinfo/python

 		 	   		  
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20111014/ae1f586f/attachment.html>


Maggiori informazioni sulla lista Python