复制带有Unicode名称的文件

3 投票
1 回答
2007 浏览
提问于 2025-04-16 07:01

这本来应该是个简单的脚本

import shutil

files = os.listdir("C:\\")
for efile in files:
    shutil.copy(efile, "D:\\")

它运行得很好,直到我在一个文件名包含Unicode字符的电脑上试了一下!当我用os.listdir获取文件列表时,Python把这些字符都变成了问号“????”,然后在复制文件的时候就出现了“找不到文件”的错误!!

1 个回答

3

你需要使用Unicode来访问那些不在你所使用的Windows系统的ANSI编码页面中的文件名。为了做到这一点,确保你给文件夹命名时使用Unicode:

import shutil

files = os.listdir(u"C:\\")
for efile in files:
    shutil.copy(efile, u"D:\\")

把一个Unicode字符串传给os.listdir,这样它返回的结果就是Unicode字符串,而不是编码后的内容。

别忘了,os.listdir不会包含路径,所以你可能实际上想要的是这样的:

shutil.copy(u"C:\\" + efile, u"D:\\")

另外,你可以查看这个链接了解更多信息:http://docs.python.org/howto/unicode.html#unicode-filenames

撰写回答