如何在Python中遍历以日语命名的目录?

5 投票
2 回答
791 浏览
提问于 2025-04-16 21:30

我正在尝试创建一个简单的小工具,它可以在我的项目中查找并通过命令行返回打开的项目。但是,当我使用 os.listdir 来列出文件夹里的内容时,如果文件夹或文件名是日文的,就会返回一些乱码(例如:'\x82\xa9\x82\xcc\x96I'),而这些乱码又无法再次用于访问文件夹。也就是说,像 os.listdir('C:\Documents and Settings\\x82\xa9\x82\xcc\x96I') 这样的调用会报错:

'WindowsError: [Error 3] 指定されたパスが見つかりません。'

有没有人知道我该怎么解决这个问题?非常感谢。

2 个回答

2

你应该尝试把目录名作为Unicode字面量传入(u'your/path')。这样,返回的结果也是Unicode格式的,这样才能处理日文字符。

根据文档的说明:

在Windows NT/2000/XP和Unix系统上,如果路径是Unicode对象,返回的结果将会是一个Unicode对象的列表。而那些无法解码的文件名仍然会以字符串对象的形式返回。

6

你可能需要先把这个字符串解码成Unicode格式,然后再把它重新编码成UTF-8格式,才能传给os.listdir。看起来你的日文字符串是用shift-JIS编码的:

>>> '\x82\xa9\x82\xcc\x96I'.decode('shift-jis').encode('utf-8')
'\xe3\x81\x8b\xe3\x81\xae\xe8\x9c\x82'
>>> print '\x82\xa9\x82\xcc\x96I'.decode('shift-jis')
かの蜂

另外,你可以利用os.listdir的一个特性,直接获取Unicode字符串:

在Windows NT/2000/XP和Unix系统上,如果path是一个Unicode对象,返回的结果将是一个Unicode对象的列表。无法解码的文件名仍然会作为字符串对象返回。

所以:

os.listdir(ur'C:\Documents and Settings')
# ---------^

撰写回答