PDA

View Full Version : [Python] funzione translate


Infrid
27-04-2010, 21:23
ciao,
volevo migliorare questo script che utilizzo per convertire, dentro un file di testo, le lettere accentate nei corrispettivi equivalenti in codice html

out = open("pagina.html","w")
line = line.translate(maketrans("èéàòù",""))
for line in open("pagina.txt"):
if line.strip():
line = line.strip()
line = line.replace("è","è")
line = line.replace("é","é")
line = line.replace("à","à")
line = line.replace("ù","ù")
line = line.replace("ò","ò")
line = line.replace("ì","ì")
#line = line.replace("\"",""")
out.write("<p>" + line + "</p>" + "\n\n")

out.close()


volevo togliere tutti quei replace e sembra che la funzione translate (http://docs.python.org/library/stdtypes.html#str.translate)fa al caso mio, questa ha bisogno di una tabella per eseguire la sostituzione dei caratteri. questa tabella si crea con maketrans e servono due stringhe di caratteri identiche in lunghezza per eseguire la sostituzione.

il mio problema è che devo sostituire un carattere con una stringa e non posso usare questo metodo per creare una tabella valida, posso usare in qualche modo un dizionario? conoscete un modo per fare le tabelle?

ps: uso python 2.6

B|4KWH|T3
29-04-2010, 00:29
Qui (http://www.tutorialspoint.com/python/string_translate.htm) spiega come fare per costruire le tabella richieste da quel metodo.

Non mi sembra che quel metodo faccia al caso tuo comunque, si può usare solo per sostiture caratteri della stessa lunghezza.

Ah, attento perchè credo che nel codice che hai scritto sovrascrivi continuamente il file, dovresti appendere le linee nel file out.html aprendolo in modalità "b", non "w".

nico159
29-04-2010, 14:51
ciao,
volevo migliorare questo script che utilizzo per convertire, dentro un file di testo, le lettere accentate nei corrispettivi equivalenti in codice html

out = open("pagina.html","w")
line = line.translate(maketrans("èéàòù",""))
for line in open("pagina.txt"):
if line.strip():
line = line.strip()
line = line.replace("è","&egrave;")
line = line.replace("é","&eacute;")
line = line.replace("à","&agrave;")
line = line.replace("ù","&ugrave;")
line = line.replace("ò","&ograve;")
line = line.replace("ì","&igrave;")
#line = line.replace("\"","&quot;")
out.write("<p>" + line + "</p>" + "\n\n")

out.close()


volevo togliere tutti quei replace e sembra che la funzione translate (http://docs.python.org/library/stdtypes.html#str.translate)fa al caso mio, questa ha bisogno di una tabella per eseguire la sostituzione dei caratteri. questa tabella si crea con maketrans e servono due stringhe di caratteri identiche in lunghezza per eseguire la sostituzione.

il mio problema è che devo sostituire un carattere con una stringa e non posso usare questo metodo per creare una tabella valida, posso usare in qualche modo un dizionario? conoscete un modo per fare le tabelle?

ps: uso python 2.6

def replace(s, d):
for key, value in d.items():
s = s.replace(key, value)
return s

replace_dict = {'è' : '&egrave;', ...}
html = replace(html, replace_dict)

Infrid
29-04-2010, 17:25
Ah, attento perchè credo che nel codice che hai scritto sovrascrivi continuamente il file, dovresti appendere le linee nel file out.html aprendolo in modalità "b", non "w".

il codice funziona, grazie della dritta, cercherò di rendere più esplicita l'apertura del file come hai consigliato per migliorare le leggibilità.

grazie a tutti siete stati gentili.