Foros del Web » Programando para Internet » Python »

Cambiar tildes

Estas en el tema de Cambiar tildes en el foro de Python en Foros del Web. Hola de nuevo! (Juer qué pesado soy) Lo siento Sigo con mi proyecto y me encuentro con una dudilla: Resulta que hay veces que en ...
  #1 (permalink)  
Antiguo 18/04/2011, 20:36
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 2
Cambiar tildes

Hola de nuevo! (Juer qué pesado soy) Lo siento

Sigo con mi proyecto y me encuentro con una dudilla:

Resulta que hay veces que en el documento que proceso, las tildes se muestran por ejemplo así "á" en vez de "á" (Cómo pasaría con una Web) Y lo único que se me ocurre es esto:

Código Python:
Ver original
  1. #Minúsculas:
  2.     Resultado = Resultado.replace("á","á")
  3.     Resultado = Resultado.replace("é","é")
  4.     Resultado = Resultado.replace("í","í")
  5.     Resultado = Resultado.replace("ó","ó")
  6.     Resultado = Resultado.replace("ú","ú")
  7.  
  8.     #Mayúsculas:
  9.     Resultado = Resultado.replace("Á","Á")
  10.     Resultado = Resultado.replace("É","É")
  11.     Resultado = Resultado.replace("Í","Í")
  12.     Resultado = Resultado.replace("Ó","Ó")
  13.     Resultado = Resultado.replace("Ú","Ú")
  14.    
  15.     #Tildes graves:
  16.     Resultado = Resultado.replace("à","à")
  17.     Resultado = Resultado.replace("è","è")
  18.     Resultado = Resultado.replace("ì","ì")
  19.     Resultado = Resultado.replace("ò","ò")
  20.     Resultado = Resultado.replace("ù","ù")
  21.  
  22.     #Tildes graves mayúsculas:
  23.     Resultado = Resultado.replace("À","À")
  24.     Resultado = Resultado.replace("È","È")
  25.     Resultado = Resultado.replace("Ì","Ì")
  26.     Resultado = Resultado.replace("Ò","Ò")
  27.     Resultado = Resultado.replace("Ù","Ù")

Lo malo es que me parece una chapuza ir reemplazando letra a letra la cadena. Es que la mayoría de veces no tienen tildes (y mucho menos las grabes) y a python le toca "reemplazarlo" de todas formas.

Sabéis de alguna manera que lo cambie automático sin tener que forzar el reemplazo?

Gracias, gracias, gracias!
  #2 (permalink)  
Antiguo 18/04/2011, 21:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Cambiar tildes

Bueno primero lo primero. Lo que estas reemplazando se llaman HTML Entities lista de HTML entities ISO-8859-1

Ahora, claro que existe una mejor forma y esa es usar un parser html como lxml. Ejemplo:
Código Python:
Ver original
  1. >>> t = lxml.html.fromstring("á")
  2. >>> t
  3. <Element p at 0x2350930>
  4. >>> t.text_content()
  5. u'\xe1'
  6. >>> print t.text_content()
  7. á

Última edición por razpeitia; 18/04/2011 a las 21:38
  #3 (permalink)  
Antiguo 18/04/2011, 22:24
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tildes

Vale aclarar que string.encode() puede hacer el trabajo inverso (convertir caracteres a sus correspondientes entidades), pero no hay nada en la biblioteca estándar de Python que permita hacer la conversión de entidades en caracteres.

Para la conversión se puede usar también BeautifulSoup:
Código Python:
Ver original
  1. from BeautifulSoup import BeautifulStoneSoup as bss
  2. Resultado = bss(Resultado, convertEntities=BeautifulStoneSoup.HTML_ENTITIES).contents[0]
http://www.crummy.com/software/Beaut...on.html#Entity Conversion
  #4 (permalink)  
Antiguo 18/04/2011, 23:19
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Cambiar tildes

@AlvaroG a pesar de que aprendí a parsear HTML con BeautifulSoup creo que es momento de decirle adiós, por varias razones:
-- El autor ya no lo esta manteniendo.
-- Es lento comparado con lxml.
-- Algunas partes las parsea con regex (Esto fue lo que partió en 2)

Link related
  #5 (permalink)  
Antiguo 19/04/2011, 17:00
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Cambiar tildes

Muchas gracias razpeitia! Ojalá supiera algo para poder ayudarte :)

Hoy ya no tengo tiempo pero mañana tengo tooodo el día para mirar lxml

AlvaroG, aunque no me vale para lo que hago, seguro que acabo utilizando lo de string.encode ;) Gracias a ti también
  #6 (permalink)  
Antiguo 19/04/2011, 17:23
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar tildes

Cita:
Iniciado por razpeitia Ver Mensaje
@AlvaroG a pesar de que aprendí a parsear HTML con BeautifulSoup creo que es momento de decirle adiós, por varias razones:
-- El autor ya no lo esta manteniendo.
-- Es lento comparado con lxml.
-- Algunas partes las parsea con regex (Esto fue lo que partió en 2)

Link related
Lástima, habrá que empezar a recomendar lxml. El archivo README de BeautifulSoup 4 lo recomienda.

Etiquetas: tildes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:56.