os.walk的非ascii文件名问题

时间:2016-03-12 15:30:30

标签: python python-2.7

我正在使用os.walk来遍历文件夹。那里有一些非ascii命名文件。对于这些文件,os.walk给了我类似???.txt的东西。我无法使用此类文件名称open。它抱怨[Errno 22] invalid mode ('rb') or filename。我应该怎么做呢?

我使用的是Windows 7,python 2.7.11。我的系统区域设置是en-us。

1 个答案:

答案 0 :(得分:8)

在Windows上使用bytestring路径列出目录会生成编码到系统区域设置的目录条目。如果系统区域设置实际上不能代表这些字符,则此编码(由Windows完成)可能会失败,从而导致占位符字符。但是,底层文件系统可以处理完整的unicode范围。

解决方法是使用unicode路径作为输入;所以而不是os.walk(r'C:\Foo\bar\blah')使用os.walk(ur'C:\Foo\bar\blah')。然后,您将获得所有部分的unicode值,并且Python使用不同的API与Windows文件系统进行通信,从而避免了可能破坏文件名的编码步骤。