[pyar] otra vez UNICODE...?

Facundo Batista facundobatista en gmail.com
Mar Abr 26 10:58:35 ART 2011


2011/4/26 Alan Jonatan Romero <eldoblecero en gmail.com>:

> def obtener_nombre_archivo(ruta): # Supongo que el nombre es lo
> suficientemente descriptivo
>     nombre = ''                   # Aqui se guarda el nombre para ser
> devuelto
>     caracteres = ''               # Guardará cada caracter antes de volcarse
> a nombre
>     copiar_caracter = False       # Indica si se copian o no los caracteres
>     for letra in reversed(ruta):  # Es mas fácil tomar los caracteres desde
> el ultimo hasta que aparezca una '\'
>         #~ print letra,
>         if letra != '\\' and copiar_caracter == True:
>             caracteres += letra
>         if letra == '.':          # Estoy considerando que el archivo tenga
> extension, sin embargo no me convence eso...
>             #~ print 'Comienzo a copiar'
>             copiar_caracter = True
>         if letra == '\\':
>             break
>
>     nombre = str(caracteres)[::-1]# Como los caracteres se copiaron al
> revés, copiamos a caracteres desde el fin al principio
>     #~ print '\nEl nombre del archivo: ',nombre
>     return nombre

No me puse a revisar todo el código, pero me llamó la atención esta
función... ¿vos sabías que os.path.basename() hace lo mismo? (o casi,
porque te deja la extensión, pero es trivial sacársela).

>>> s = "/temp/foo.bar.exe"
>>> os.path.basename(s).rsplit(".", 1)[0]
'foo.bar'

En general, creo que estás procesando los datos como si fuese ANSI C,
y en Python creo que podrías hacer casi todo eso en algunas pocas
lineas, con las funciones que ya trae Python.

Es más, casi seguro que si dejás de procesar la cadena byte a byte, no
te choques con los problemas de Unicode que tenés ahí, mirá:

>>> s = u"/temp/foo.manchú.exe"
>>> print os.path.basename(s).rsplit(".", 1)[0]
foo.manchú

Slds.

-- 
.    Facundo

Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/



More information about the pyar mailing list