[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