[pyar] Unicode como nombre de archivo

Javier Castrillo riverplatense en gmail.com
Mar Jun 8 14:53:34 ART 2010


Sea el siguiente caso:

Se cargaron nombres y apellidos en un archivo CSV

Ejemplo:
0,Julián,Pérez,correo en correo.com
1,Marcela,Blanco,mar en gmail.com
........

Y con un script + reportlab se generaba por cada persona un
certificado en .pdf que se guardaba como (siguiendo el ejemplo):

certificado_Julián Pérez.pdf
certificado_Marcela Blanco.pdf

Ahora, estamos mandando ese mismo certificado como adjunto de un
correo y por supuesto con otro script que mande los correos leyendo
las líneas del archivo CSV, adjuntando el certificado correspondiente
y listo: Sería algo así:

import smtplib
import mimetypes

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.Encoders import encode_base64

gente = open('datos.txt', 'r')
for renglon in gente:
    linea = renglon.strip()
    linea = linea.split(',')
    apellido = str(linea[1])
    nombre = str(linea[2])
    mail = linea[4]
    sexo = linea [3]
    if sexo == ' Masculino':
        sexo1 = 'Estimado'
    else:
        sexo1 = 'Estimada'

# Construimos un mensaje Multipart, con un texto y una imagen adjunta
    mensaje = MIMEMultipart()
    mensaje['From']="origen en gmail.com"
    mensaje['To']= destino en gmail.com
    mensaje['Subject']="Certificado de asistencia"

# El texto
    mensaje.attach(MIMEText('''%s gracias por participar...''' %
(sexo1 + nombre + apellido)))

# Adjuntamos certificado
    nombre_archivo = nombre + ' ' + apellido
    file = open("certificado_%s" % (nombre_archivo), "rb")
    contenido = MIMEImage(file.read())
    contenido.add_header('Content-Disposition', 'attachment; filename
= "certificado_%s" %(nombre + apellido)')
    mensaje.attach(contenido)

# Establecemos conexion con el servidor smtp de gmail
    mailServer = smtplib.SMTP('smtp.gmail.com',587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login("origen en gmail.com","passwd")

# Enviamos el correo, con los campos from y to.
    mailServer.sendmail("origen en gmail.com",
                mail,
                mensaje.as_string())

# Cierre de la conexion
mailServer.close()
gente.close()



La cuestión es que cuando, por ejemplo buscamos el certificado de un
tal "Martín"
 el tipo busca "certificado_Mart\xedn" y obviamente no lo encuentra.
Ya sé que debería haber encodeado los datos *antes* de meterlos al
archivo, pero la cosa ya está. La pregunta es:

¿Cúal es la mejor manera de que el script encuentre el certificado, o
sea de pasar  de "Mart\xedn" a "Martín" en las actuales
circunstancias.?

Muchas gracias desde ya por la ayuda

-- 
Javier Castrillo

=========================================================
GNU / Linux User #242275

Jabber: javier en nube.usla.org.ar
Blog:   http://blog.javier.org.ar
Site:    http://carapa.com.ar
TCOS: http://argentina.tcosproject.org
=========================================================
Usá Software Libre



More information about the pyar mailing list