Ciao Marco, On 29/10/14 17:35, Marco Ciampa wrote: > l'idea è di sostituire questa <img src="data ..." name=graphics1"...> con > la stessa cosa ma salvando l'immagine decodificata .png in > images/graphics1.png e cambiare il link in <img src="images/graphics1.png" > ...> > > Ho buttato li tutto per dare un'idea di dove stavo andando a parare. > Premetto che non sono mai stato un mago neanche delle espressioni regolari. > ecco qua: Usare le espressioni regolari per fare il parsing di un documento HTML non è certo la soluzione che raccomanderei. Se l'HTML che devi modificare è un documento XML valido, puoi usare una delle librerie che ti permettono di lavorare agevolmente con esso. Per il tuo caso io credo userei xml.etree dalla libreria standard. Se l'HTML non è strettamente XML, puoi usare la libreria BeautifulSoup. Non dici dove sorgono i problemi, ma di seguito un paio di commenti: > #!/usr/bin/python3 > > import re > import base64 > import os > > #Created images folder > directory='images' > if not os.path.exists(directory): > os.makedirs(directory) > > #Source file > FIN=open('cvpcb_EN-LIBO.html') > #Destination file > FOUT=open('cvpcb_EN-out.html','w') Lo standard di stile per il codice Python, che consiglio vivamente di adottare sconsiglia i nomi tutti maiuscoli per le variabili, i nomi in maiuscolo sono solitamente utilizzati per identificare le costanti. Inoltre si preferisce uno spazio prima e dopo il segno di =, e tra il # ed il primo carattere dei commenti. > for line in FIN: > #Search for image tag > cerca = re.search('$(.*) (<img src="data:image/png;base64,.*) (.*)', line) Questa regular exprerssion non la capisco, perchè usare il metodo search() con un espressione ancorata all'inizio della riga? Io userei match(), poi l'ultimo gruppo '(.*)' risulterà sempre vuoto a causa del .* che lo precede. > if (cerca): > preamble=cerca.group(0) > resto=cerca.group(1) > print ("found in line ",n_line,":",preamble[0:10]) Io trovo print("found in line {:}: {:}".format(n)_line, preamble[:10])) più facile da leggere. > #cerca = re.search('<img src="data:image/png;base64,(.*?)" > name="(graphics.?.?.?)" (.*)', line) Costruendo opportunamente l'espressione regolare precedente non avresti bisogno di interpretare la riga di input due volte. Anche qui il problema probabilmente è che l'ultimo (.*) si mangia tutto quello che segue e non solo quello che ti serve. > #If img tag matches ... convert it into image > #start=cerca.group(1) > #img=cerca.group(2) > #name=cerca.group(3) Dalla mia interpretazione di quello che cerchi di fare con l'espressione regolare, name è group(2) e img è group(3). > #FIMG=open('images/'+name+'.png','w') > #print ("found in line ",n_line,":",'"'+name+'"') > #FIMG.close > n_line=n_line+1 Se vuoi iterare un oggetto iterabile tenendo il conto del numero di iterazioni il il modo Python-ico di farlo è: for n_line, line in enumerate(FIN): ... Spero di essere stato d'aiuto. Ciao, Daniele -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx