用python打开目录中的文件,编码有问题

时间:2012-04-05 12:35:15

标签: python file encoding operating-system directory

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。有什么不对?

1 个答案:

答案 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