Mac OS X下Python 2.6中的Unicode文件名

1 投票
1 回答
785 浏览
提问于 2025-04-15 16:54

我正在使用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)

撰写回答