Mac OS X下Python 2.6中的Unicode文件名
我正在使用os.walk来创建一个文件夹下所有音乐文件的列表。其中一些文件名是非ASCII字符,比如:
01 空即是色.mp3
我使用mutagen库来解析这个文件的元数据,它声称完全支持unicode。文件名以unicode格式获取,并且可以正常打印。但是,无论我怎么做(包括提前规范化unicode,或者提前将其编码为utf-8),mutagen尝试去 open()
01 \xe7\xa9\xba\xe5\x8d\xb3\xe6\x98\xaf\xe8\x89\xb2.mp3
或者
01 \u7a7a\u5373\u662f\u8272.mp3
我该如何强制它去 open()
正确的文件名(就是那个可以正常 print
的文件名)呢?
完整代码可以在 这里 找到。
注意:我对python和编程整体还比较新,如果你能给我一些关于我代码的建议,我会非常感激。提前谢谢你!
编辑:好吧,这真是我一个尴尬的错误,问题并不是字符编码,而是路径没有加到 open()
调用中。我该如何找到通过 walk()
找到的文件的完整路径呢?这些文件在2-3层目录深处。
1 个回答
2
注意,walk(dir)
这个函数返回的文件名是 没有路径 的。如果你想打开这个文件,你需要在前面加上 dir
:
for dirpath, dirnames, filenames in os.walk(dir):
for filename in filenames:
path = os.path.join(dirpath, filename)