以下代码的行为相同:
for dirname, dirnames, filenames in os.walk('c:\path\somewhere'):
for subdirname in dirnames:
print (os.path.join(dirname, subdirname))
for filename in filenames:
print (os.path.join(dirname, filename))
更新: unicode位于文件名中,而不在路径中...
答案 0 :(得分:5)
Unicode字符串的语法从2更改为3.尝试指定如下的Unicode字符串:
u'c:\\path\\somewhere'
如果你想要Python 3的语法(除非给出b
前缀,否则字符串文字默认为Unicode),使用
from __future__ import unicode_literals
位于文件顶部。
答案 1 :(得分:2)
Python 3默认情况下使所有字符串成为Unicode,这可能就是为什么它可以与开箱即用的Python 3一起使用。
listdir
州的文档
在版本2.3中更改:在Windows NT / 2k / XP和Unix上,如果 path 是Unicode对象,则结果将是Unicode对象列表。不可解码的文件名仍将作为字符串对象返回。
所以我猜你必须在Python 2中明确地将你的路径作为Unicode字符串给出,以便将结果作为Unicode。
答案 2 :(得分:0)
Python 2.x支持unicode,但unicode不是默认值(就像3.x一样)。
在Python 2.x中,字符串默认为8位字节数组,因此在使用文件系统时,您将看到UTF-8编码的文件名。
在Python 3.x中,默认情况下所有字符串都是unicode,因此UTF-8解码发生在IO子例程中。