将python文件名转换为unicode

Ber*_*rnd 17 python unicode

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


Sho*_*car 6

我一直在寻找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)