我在用于Windows的python 2.6上.
我使用os.walk来读取文件树.文件的文件名中可能包含非7位字符(例如德语"ae").它们以Pythons内部字符串表示形式编码.
我正在使用Python库函数处理这些文件名,并且由于编码错误而失败.
如何将这些文件名转换为正确的(unicode?)python字符串?
我有一个文件"d:\ utest \ü.txt".将路径作为unicode传递不起作用:
>>> list(os.walk('d:\\utest'))
[('d:\\utest', [], ['\xfc.txt'])]
>>> list(os.walk(u'd:\\utest'))
[(u'd:\\utest', [], [u'\xfc.txt'])]
Run Code Online (Sandbox Code Playgroud)
Ric*_*dle 45
如果您传递Unicode字符串os.walk()
,您将获得Unicode结果:
>>> list(os.walk(r'C:\example')) # Passing an ASCII string
[('C:\\example', [], ['file.txt'])]
>>>
>>> list(os.walk(ur'C:\example')) # Passing a Unicode string
[(u'C:\\example', [], [u'file.txt'])]
Run Code Online (Sandbox Code Playgroud)
我一直在寻找Python 3.0+的解决方案.如果其他人需要它,它会把它放在这里.
rootdir = r'D:\COUNTRY\ROADS\'
fs_enc = sys.getfilesystemencoding()
for (root, dirname, filename) in os.walk(rootdir.encode(fs_enc)):
# do your stuff here, but remember that now
# root, dirname, filename are represented as bytearrays
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24194 次 |
最近记录: |