<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'><div dir='ltr'>


<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>

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