[Python-es] problema con las tildes

monoBOT monobot.soft en gmail.com
Lun Abr 5 00:04:59 CEST 2010


Muchas gracias lo probare.

El 4 de abril de 2010 22:38, Luis Miguel Morillas <morillas en gmail.com>escribió:

> El día 4 de abril de 2010 10:26, monoBOT <monobot.soft en gmail.com>
> escribió:
> > la línea 83 está en la función de grabado:
> >     def grabar(self, event):
> >         dialogo=wx.MessageDialog(None, '¿Desea Grabar y Salir?',
> 'Atención',
> > wx.YES_NO|wx.ICON_QUESTION|wx.STAY_ON_TOP)
> >         respuesta=dialogo.ShowModal()
> >         if (respuesta ==wx.ID_YES):
> >             print 'obteniendo valores...'
> >             nombres_attr = ['numerocolegiado','nombre', 'primerapellido',
> > 'segundoapellido', 'dni', 'direccion', 'codigopostal', 'poblacion',
> 'email',
> > 'telefono1', 'telefono2']
> >             datos_entrados = [self.ventana.entranumcol,
> > self.ventana.entranombre, self.ventana.entraapellido1,
> > self.ventana.entraapellido2, self.ventana.entradni,
> self.ventana.entradirec,
> > self.ventana.entrapost, self.ventana.entrapobl, self.ventana.entraemail,
> > self.ventana.entratf1, self.ventana.entratf2]
> >             print 'guardando...'
> >             for m in range(len(datos_entrados)):
> >                 cambia_attrib(arbol='usuario', dato=nombres_attr[m],
> > nuevovalor=reg_xml(datos_entrados[m].GetValue()))
> >             nom_empr = ['nombreempresa', 'cifempresa',
> > 'direccionempresa','codigopostalempresa', 'telefonoempresa']
> >             dat_empr = [self.ventana.entranombreempresa,
> > self.ventana.entracifempresa, self.ventana.entradireccionempresa,
> > self.ventana.entracodigopostalempresa, self.ventana.entratelefonoempresa]
> >             for m in range(len(nom_empr)):
> >                 cambia_attrib(arbol='datosempresa', dato=nom_empr[m],
> > nuevovalor=reg_xml(dat_empr[m].GetValue()))
> >             cambia_attrib('usuario', 'colegio',
> > reg_xml(self.ventana.entracolegio.GetStringSelection()))
> >             cambia_attrib('usuario', 'provincia',
> > reg_xml(self.ventana.entraprov.GetStringSelection()))
> >             guarda_datos(datogral)
> >             print 'guardado'
> >             self.Destroy()
> >         else:
> >             print 'Cancelado'
> >             dialogo.Destroy()
> > la función de grabado lo que hace es llamar a unas
> > variables self.ventana.entranombreempresa     todas ellas se montan de
> esta
> > forma:
> > self.ventana.entranombre = wx.TextCtrl(self.ventana, -1,
> nombre_en_fichero)
> > y el valor por defecto de cada una proviene del fichero xml también:
> > nombre_en_fichero = xml_none(busqueda_xml ('usuario', 'nombre'))
> > así que lo que hago es:
> > lee xml ---> muestra en pantalla el dato guardado ---> el usuario cambia
> los
> > datos ---> grabo los datos.
> > las funciones de lectura y guardado de xml son:
> > def busqueda_xml (arbol, dato):
> >     valor =
> >
> arbol_gral.getElementsByTagName(arbol)[0].getElementsByTagName(dato)[0].childNodes[0].nodeValue
> >     return valor
> > def guarda_datos(archivo):
> >     fichero = open(os.path.realpath(archivo), "w")
> >     arbol_gral.writexml(fichero, encoding='iso-8859-1')
> >     fichero.close()
> >     return True
>
> El error lo genera writexml en esta función. Yo no utilizo minidom,
> pero supongo que esto te funcionará:
>
> import codecs # esto ponlo al principio del fichero
>
> def guarda_datos(archivo):
>      fichero = codecs.open(os.path.realpath(archivo),  "w", 'iso-8859-1')
>       arbol_gral.writexml(fichero, encoding='iso-8859-1')
>      fichero.close()
>      return True
>
> Si quieres utilizar tu código en un sistema en producción, habría que
> revisar algunas cosas. Yo te recomiendo utilizar otros módulos en
> lugar de minidom. Echa un vistazo a Amara
> (http://wiki.xml3k.org/Amara2), te permite manejar xml como si fueran
> objetos python.
>
> --lm
>
> > la funcion xml_none lo que hace es cambiar una entrada igual a cero por
> un
> > campo limpio
> > def xml_none(m):
> >     if m =='0':
> >         n = ''
> >         return n
> >     return m
> > la función contraria la pongo al grabar y lo que hace es convertir un
> campo
> > vacío en un 0, y también los caracteres prohibidos por xml por sus
> sutitutos
> > ... así evito el error al grabar.
> >
> > def reg_xml(m):
> >     if m == '':
> >         n = '0'
> >         return n
> >     n = m.replace('&', '&amp')
> >     n = n.replace('<','&lt')
> >     n = n.replace('>','&gt')
> >     return n
> >
> > --
> > monobotblog.alvarezalonso.es
> > _______________________________________________
> > Python-es mailing list
> > Python-es en python.org
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> >
> >
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
Héctor Alvarez
Arquitecto

Advertencia legal:
De acuerdo a la vigente Ley Orgánica 15/1999 de Protección de Datos de
carácter Personal le informamos que:
Este correo electrónico contiene información privada y estrictamente
confidencial. Si usted NO ES el destinatario, NO ESTA AUTORIZADO a leerlo,
directa o indirectamente, usar, revelar, distribuir, imprimir o copiar
ninguna de las partes y/o anexos de éste mensaje. Si por error ha recibido
este mensaje, le rogamos lo notifique a su emisor respondiendo a éste e-mail
y proceda a borrar de su sistema inmediatamente el mensaje así como todas
sus copias.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100404/5cb5f232/attachment.html>


Más información sobre la lista de distribución Python-es