Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python打开目录中的文件,编码有问题_Python_File_Encoding_Operating System_Directory - Fatal编程技术网

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

用python打开目录中的文件,编码有问题,python,file,encoding,operating-system,directory,Python,File,Encoding,Operating System,Directory,我已经用python编写了一个脚本,它可以遍历目录中的所有文件并打开它们。它工作正常,问题出现在一些文件的名称上。文件名为Trade_Map_-_List_of_products_exported_of_科特迪瓦,但当它试图打开时,我不能得到此错误 IOError:[Errno 2]没有这样的文件或目录:“C:\\Users\\Borut\\Downloads\\GC Downloads\\izvoz\\Trade\u Map\u-\u List\u由科特迪瓦出口的产品清单.txt” 真正的名字

我已经用python编写了一个脚本,它可以遍历目录中的所有文件并打开它们。它工作正常,问题出现在一些文件的名称上。文件名为Trade_Map_-_List_of_products_exported_of_科特迪瓦,但当它试图打开时,我不能得到此错误

IOError:[Errno 2]没有这样的文件或目录:“C:\\Users\\Borut\\Downloads\\GC Downloads\\izvoz\\Trade\u Map\u-\u List\u由科特迪瓦出口的产品清单.txt”


真正的名字最后是科特迪瓦,而我迭代listdir时得到的名字最后是科特迪瓦。有什么问题吗?

os.listdir(path)的编码取决于字符串
path
的编码。 如果
path
是unicode,那么
os.listdir(path)
返回的条目列表将是unicode。否则,返回的列表将使用系统默认编码。如果要确保正确输出文件列表,可以尝试以下操作(未测试):

sys.getfilesystemencoding()
是一种获取系统默认编码的方法,这就是
open
和其他方法期望字符串输入的方式(尽管unicode也很好,因为它们会自动将其转换为默认编码)

参考:

import os
listing = os.listdir(path)
for infile in listing:
    print infile
    f = open(os.path.join(path, infile), 'r')
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')