2011-09-25 14 views
6

Así que lo que estoy tratando de hacer es arreglar algunos id3tags de archivos mp3. Todo funciona, a excepción de los archivos con cualquier tipo de acento, porque os.walk parece despojarlos.os.walk() tiras de caracteres polaco

Por ejemplo, tengo el archivo 01.Co Słychać.mp3, que en este código:

for root, dirs, files in os.walk(folder): 
    print files 

aparece como ['01.Co Slychac.mp3'], más adelante lo que resulta en un 'No existe el fichero o directorio' error.

¿Cómo se puede solucionar?

+0

¿Qué Python (número de versión y fuente), y es la versión Unicode? –

Respuesta

7

¿Ha definido folder como una cadena Unicode? Esto tiene implicaciones sobre cómo os.walk() coincide con sus subdirectorios, o mejor, el tipo de cadena que devuelve.

>>> for a,b,c in os.walk("."): 
... print b 
... break 
... 
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'tcl', 'Tools'] 
>>> for a,b,c in os.walk(u"."): 
... print b 
... break 
... 
[u'DLLs', u'Doc', u'include', u'Lib', u'libs', u'tcl', u'Tools'] 
+0

Resolvió mi problema. – Robus

+1

Genial. Me pregunto por qué la [documentación] (http://docs.python.org/library/os.html#os.walk) no menciona esto. –

+1

Ah, ya veo. 'os.walk()' utiliza 'os.listdir()', y [aquí] (http://docs.python.org/library/os.html#os.listdir) los documentos explican este comportamiento: "En Windows NT/2k/XP y Unix, si 'ruta' es un objeto Unicode, el resultado será una lista de objetos Unicode. Los nombres de archivos indecodificables seguirán siendo devueltos como objetos de cadena." –

Cuestiones relacionadas