2011-09-25 15 views
6

Więc próbuję naprawić niektóre id3tagi plików mp3. Wszystko działa, z wyjątkiem plików z dowolnym rodzajem akcentu, ponieważ wydaje się, że os.walk je rozbiera.os.walk() rozbiera polskie znaki

Na przykład, mam plik 01.Co Słychać.mp3, który w tym kodzie:

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

pokazuje się jako ['01.Co Slychac.mp3'], później w wyniku „Nie ma takiego pliku lub katalogu” błąd.

Jak można to naprawić?

+0

Który Python (numer wersji i źródło) i czy jest to wersja Unicode? –

Odpowiedz

7

Czy zdefiniowano folder jako ciąg znaków Unicode? Ma to wpływ na to, w jaki sposób os.walk() dopasowuje swoje podkatalogi lub, lepiej, typ zwracanego ciągu.

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

Rozwiązałem mój problem. – Robus

+1

Świetnie. Zastanawiam się, dlaczego [documentation] (http://docs.python.org/library/os.html#os.walk) o tym nie wspomina. –

+1

Ah, rozumiem. 'os.walk()' używa 'os.listdir()' i [tutaj] (http://docs.python.org/library/os.html#os.listdir) dokumenty wyjaśniają to zachowanie: "W systemie Windows NT/2k/XP i Unix, jeśli 'path' jest obiektem Unicode, wynikiem będzie lista obiektów Unicode. Undecodable nazwy plików będą nadal zwracane jako obiekty typu string." –