2011-09-25 63 views
6

所以我想要做的是修复一些mp3文件的id3tags。除了有任何口音的文件之外,它都可以工作,因为os.walk似乎将它们去掉了。os.walk()带波兰字符

例如,我有文件01.Co Słychać.mp3,在该代码:

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

显示为['01.Co Slychac.mp3'],后来导致“没有这样的文件或目录”错误。

这怎么解决?

+0

哪个Python(版本号和来源),它是Unicode版本? –

回答

7

您是否将folder定义为Unicode字符串?这会影响os.walk()如何匹配其子目录,或者更好地说,它返回的字符串类型。

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

解决了我的问题。 – Robus

+1

太好了。我想知道为什么[文档](http://docs.python.org/library/os.html#os.walk)没有提到这一点。 –

+1

啊,我明白了。 'os.walk()'使用'os.listdir()'和[这里](http://docs.python.org/library/os.html#os.listdir)文档解释了这种行为:“在Windows NT/2k/XP和Unix,如果'path'是一个Unicode对象,结果将是一个Unicode对象列表。不可解码的文件名仍然会作为字符串对象返回。 –