2011-09-25 4 views
6

Donc ce que je suis en train de faire est de corriger certains id3tags de fichiers mp3. Tout fonctionne, sauf pour les fichiers avec n'importe quel accent, car os.walk semble les dépouiller.os.walk() bandes caractères polonais

Par exemple, j'ai le fichier 01.Co Słychać.mp3, qui dans ce code:

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

apparaît comme ['01.Co Slychac.mp3'], ce qui plus tard dans un « Aucun fichier ou répertoire » erreur.

Comment est-ce que ceci peut être fixé?

+0

Quel Python (numéro de version et source), et est-ce la version Unicode? –

Répondre

7

Avez-vous défini folder en tant que chaîne Unicode? Cela a des implications sur la façon dont os.walk() correspond à ses sous-répertoires, ou mieux, au type de chaîne qu'il renvoie.

>>> 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

Résolu mon problème. – Robus

+1

Génial. Je me demande pourquoi la [documentation] (http://docs.python.org/library/os.html#os.walk) ne mentionne pas cela. –

+1

Ah, je vois. 'os.walk()' utilise 'os.listdir()', et [ici] (http://docs.python.org/library/os.html#os.listdir) les docs expliquent ce comportement: "Sous Windows NT/2k/XP et Unix, si 'path' est un objet Unicode, le résultat sera une liste d'objets Unicode Les noms de fichiers non décodables seront toujours retournés en tant qu'objets string." –