[Programación]dudita python
Ernesto Savoretti
esavoretti en gmail.com
Vie Mar 5 21:20:51 ART 2010
El día 5 de marzo de 2010 21:07, Emiliano Nuñez
<nunez.emiliano en gmail.com> escribió:
>> El día 5 de marzo de 2010 20:21, Emiliano Nuñez
>> <nunez.emiliano en gmail.com> escribió:
>>> Alguien me explica por qué imprime diferente lo siguiente?:
>>>
>>> 1 - >>> print urllib.unquote("file://NI%C3%91A PASTORI")
>>> file://NIÑA PASTORI
>>>
>>>
>>> 2- >>> urllib.unquote("file://NI%C3%91A PASTORI")
>>> 'file://NI\xc3\x91A PASTORI'
>>
>> En el primer caso, lo que te aparece en pantalla es la salida de la
>> función print, que sabe como representar en pantalla (de acuerdo al
>> encoding de tu terminal. ) los caracteres no ascii (ord > 127) que
>> estén embebidos en tu objeto, que en este caso es un string.
>> Hint: probá a cambiar el encoding de tu terminal y fijate que
>> probablemente lo que te aparezca en pantalla sea distinto
>>
>> En el segundo caso, estás viendo la representación "cruda" del objeto,
>> podríamos decir lo que en realidad "es", los bytes que lo componen..
>>
>>
>>>
>>> Lo que necesito y guardar en una variable la salida del caso 1.
>>>
>> Lo que guardás/serializás es el string en sí mismo, no "cómo luce".
>> Cómo lo muestres cuando después lo vuelvas a usar, vuelve a ser una
>> cuestión de representación.
>>
>> Sugerencia: pegale una miradita en la doc de python al manejo de
>> unicode. (O a unicode en general, independientemente de Python)
>>
>> Saludos.
>
> Hola Ernesto, gracias por responder, clarisimo.
>
> El tema viene por lo siguiente, quiero abrir el siguiente fichero:
>
>>>> a=file(u'/home/emiliano/music/NI\xc3\x91A PASTORI/Joyas Prestadas/02 - Vivir Sin Aire.ogg',"rb");
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> IOError: [Errno 2] No such file or directory:
> u'/home/emiliano/music/NI\xc3\x91A PASTORI/Joyas Prestadas/02 - Vivir
> Sin Aire.ogg'
>>>>
>
> como puedes ver le indico que es unicode antes de comenzar la cadena.
>
> sin ambargo:
>
>>>> a=file(u'/home/emiliano/music/NIÑA PASTORI/Joyas Prestadas/02 - Vivir Sin Aire.ogg',"rb");
>>>>
>
> lo abre correctamente.
>
> El problema es que el nombre del fichero me lo da otra rutina de
> libreria..y me lo da de la forma del primer caso que me da el error..
> un saludo.
> _______________________________________________
> Programacion mailing list
> Programacion en lugro.org.ar
> http://lugro.org.ar/mailman/listinfo/programacion
>
A ver si esto te ayuda, te mando un dump de terminal de un pequeño ejercicio:
ernesto en lapbot3:~/programas/python/pruebas_unicode$ python
Python 2.6.4 (r264:75706, Jan 25 2010, 08:55:26)
[GCC 4.4.2 20091208 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> archivos = os.listdir(os.getcwd())
>>> archivos
['ni\xc3\xb1a.txt']
>>> arch = archivos[0]
>>> arch
'ni\xc3\xb1a.txt'
>>> print arch
niña.txt
>>> f = open('ni\xc3\xb1a.txt', 'rb')
>>> f.read()
'Esto es una prueba...\n'
>>> f = open(u'ni\xc3\xb1a.txt', 'rb')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: u'ni\xc3\xb1a.txt'
>>> f = open(arch, 'rb')
>>> f.read()
'Esto es una prueba...\n'
>>>
Como se ve, justamente falla cuando transformo al string en un
unicode, y no falla si lo abro dándole el literal sin hacer de ello un
unicode, o si simplemente le doy la variable donde capturé el nombre.
(en tu caso, sería capturar en una variable lo que devuelve la rutina
que usa urllib)
Sugeriría que pruebes eso.
--
Ernesto Savoretti
Más información sobre la lista de distribución Programacion