import os
listing = os.listdir(path)
for infile in listing:
print infile
f = open(os.path.join(path, infile), 'r')
我在python中创建了一个脚本,它遍历目录中的所有文件并打开它们。它工作正常,问题出现在某些文件的名称上。该文件的名称是Trade_Map _-_List_of_products_exported_by_Côte_d'Ivoire,但是当它试图打开它时我无法收到此错误
IOError: [Errno 2] No such file or directory: "C:\\Users\\Borut\\Downloads\\GC downloads\\izvoz\\Trade_Map_-_List_of_products_exported_by_Co^te_d'Ivoire.txt"
真正的名字最后有Côte_d'Ivoire,而我在遍历listdir时得到的名字最后有Co ^ te_d'Ivoire。有什么不对?
答案 0 :(得分:2)
os.listdir(path)
的编码取决于字符串path
的编码。
如果path
是unicode,则os.listdir(path)
返回的条目列表将是unicode。否则,返回的列表将使用系统默认编码。如果您想确保正确输出文件列表,可以尝试以下(未经测试):
import os
import sys
path = unicode(path, sys.getfilesystemencoding())
# All elements of listing will be in unicode.
listing = os.listdir(path)
for infile in listing:
print infile
# When infile is in unicode, the system to open
# the file using the correct encoding for the filename
f = open(os.path.join(path, infile), 'r')
sys.getfilesystemencoding()
是一种获取系统默认编码的方法,这是open
和其他方法期望其字符串输入的方式(即使unicode也很好,因为它们会自动将它们转换为默认编码)。
参考:http://docs.python.org/howto/unicode.html#unicode-filenames