我正在使用os.walk创建文件夹下所有音乐文件的列表。其中一些文件名是非ascii,例如:
01空即是色.mp3
我正在使用mutagen库来解析此文件的元数据,并且它声称完全支持unicode。文件名被检索为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
的文件名?)
完整代码为here.
注意:我对python和编程一般都是新手,对于我的代码你可以给出的任何建议都会非常感激。提前致谢
编辑:好的,这是我的一个相当尴尬的错误,问题不是字符编码,而是路径没有附加到open()
调用。如何找到通过walk()
找到的文件的完整路径?这些文件是2-3个目录。
答案 0 :(得分:2)
请注意,walk(dir)
会返回文件名,不带路径。如果要打开文件,则必须添加dir
:
for dirpath, dirnames, filenames in os.walk(dir):
for filename in filenames:
path = os.path.join(dirpath, filename)