[Python] Mail from GioMBG > chiedo consigli su modifiche multiple sullo stesso file di testo in un colpo solo con python

Daniele Varrazzo piro a develer.com
Dom 30 Set 2007 11:32:41 CEST


Gio MBG Canepa root ha scritto:
> http://home.9records.com/wiki/index.php/Template
> 
> questo è quello che io chiamo un "beta template"
> cioè una pagina wiki che necessita di essere correttamente compilata con delle 
> sostituzioni che la rendano utile al suo scopo,
> 
> I termini da sostituire (sempre per esempio) potrebbero essere:
> 
> LA_BEL				9records.com
> LA_BE_LNODOT		9records
> CATALOGO			9REC001
> NUMCATA			001
> GRUPPO				Pippo
> SDATE				01/01/2007
> N_ICK				Pluto
> N_AME				Minni
> SURNAM_E			Minorpio
> YEAR				2007
> 
> in realtà ci sono circa 50 sostituzioni da effettuare questo è un piccolo 
> esempio della manovra reale che dovrei effettuare (in un colpo solo) sul mio 
> file di testo.		

Ciao,

il meccanismo principale di sostituzione tra stringhe in Python prevede che i 
placehoder nel template siano in formato %(nome)s. Per cui se tu avessi un 
template:

     # N.B. questo l'ho copiato dal tuo template, ma non è HTML valido!
     template = """
     <td><b>%(CATALOGO)s</font></b></td>
     <td><b>%(GRUPPO)s</font></b></td>
     """

allora potresti tenere le cose da sostituire in un dizionario:

     valori = {
       'CATALOGO' : 'Juno',
       'GRUPPO'   : 'Boards of Canada',
     }

e usare l'operatore % sulle stringhe

     pagina = template % gruppo

----

C'è anche un metodo un po' meno efficiente, ma che ti permetterebbe di 
lasciare inalterati i tuoi template (quindi, se sommi il suo tempo col *tuo* 
tempo, molto più efficiente!): usare le espressioni regolari. Il metodo sub() 
puo' prendere in input un callable che viene chiamato con un oggetto match in 
input e che deve restituire la stringa da sostituire:

     template = """
     <td><b>CATALOGO</font></b></td>
     <td><b>GRUPPO</font></b></td>
     """

     import re

     # Matcha le chiavi del dizionario dei valori
     rex = re.compile("|".join(valori))

     pagina = rex.sub(lambda m: valori[m.group()], template)

----

Questo serve a creare stringhe da stringhe: da dove ottieni il tuo template? 
che te ne fai della pagina di output? Con Python puoi anche automatizzare 
l'interazione col web, ad esempio effettuando il post della pagina generata in 
una form offerta da wikimedia. Dai un'occhiata ai moduli di sistema "urllib" e 
"urllib2".

Ciao!

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python