Splitlines con Unicode

Consulte acerca de programas, técnicas, algoritmos etc.

Splitlines con Unicode

Notapor kiketom » Jue Oct 20, 2011 10:56 am

Tengo un problema con el metodo splitlines().
Resulta que tengo un programa que lle datos de un xml y los guarda en una lista.

Utilizo el minidom para leer los datos del XML.

Pro cuanto intento hacer un splitlines del elemento de la lista, los retornos de carro no los tiene en cuenta.
Me imprimir esto:

[u'Esto es una \\n prueba.']

El XML es algo como esto:
<datos>
<texto>Esto es una \n prueba. </texto>
</datos>
Avatar de Usuario
kiketom
 
Mensajes: 82
Registrado: Lun Ene 03, 2011 3:01 pm
Ubicación: Valencia, España

Re: Splitlines con Unicode

Notapor Barajas » Vie Oct 21, 2011 4:06 am

En teoría, el método funciona de las dos formas (escribiendo el símbolo (\n) o escribiéndolo ) en el interprete...
es decir:
>>> a = """hola mundo
... como estas"""
>>> a.splitlines()
['hola mundo', 'como estas']
>>> a = "hola mundo \n como estas"
>>> a.splitlines()
['hola mundo ', ' como estas']
>>>


Se que esto sera molesto, pero podrías mostrar el código, y así podríamos decir que falla exactamente... :)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Splitlines con Unicode

Notapor kiketom » Vie Oct 21, 2011 6:38 am

Este sería el codigo.

XML
<datos>
<texto>Esto es una \n prueba más.</texto>
</datos>



PROGRAMA
from xml.dom import minidom

# Cargamos en objeto arbol_dom el documento xml
xml_documento = minidom.parse('archivo.xml')

mensajes = []

for node in xml_documento.getElementsByTagName('datos'):

if (node.hasChildNodes()):
for i in range(len(node.childNodes)):
if (node.childNodes[i].nodeName == "texto"):
mensajes.append(node.childNodes[i].childNodes[0].data)


print mensajes[0].splitlines()


Gracias ;)
Avatar de Usuario
kiketom
 
Mensajes: 82
Registrado: Lun Ene 03, 2011 3:01 pm
Ubicación: Valencia, España

Re: Splitlines con Unicode

Notapor Barajas » Vie Oct 21, 2011 4:50 pm

El problema esta en que cuando se carga el fichero, trasforma la cadena de la forma:
"Esto es una \n prueba más."

a...

"Esto es una \\n prueba más."

Es decir, trasforma el símbolo del salto de linea en caracteres....

Es más, el programa funciona bien si el archivo esta escrito así...
Código: Seleccionar todo
<datos>
    <texto>Esto es una
prueba.
Al igual que... \n esto...</texto>
</datos>


Con eso tu programa regresaría una salida del tipo:

Código: Seleccionar todo
[u'Esto es una', u'prueba.', u'Al igual que... \\n esto...']


Abría que investigar si hay una manera de que no lo haga ;)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Splitlines con Unicode

Notapor kiketom » Lun Oct 24, 2011 6:18 am

Lo he solucionado cambiando el splitlines() por split('\\n').

Gracias ;)
Avatar de Usuario
kiketom
 
Mensajes: 82
Registrado: Lun Ene 03, 2011 3:01 pm
Ubicación: Valencia, España


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado