在python中读取csv文件。我是否有编码错误的问题?

在python中读取csv文件。我是否有编码错误的问题?,python,csv,encoding,utf-8,Python,Csv,Encoding,Utf 8,我下载了700个大型csv文件(excel csv文件)。该文件有逗号分隔符和15列。但是,在某些行中有16列。这是因为其中一列是我在其中创建了第16行的国家,例如“Korea,South”(数据没有被“”包围) 因此,我的问题是,如果我加载一个带有pandas.read_csv()的csv文件,我必须跳过不好的行(韩国的行),我想保留这些行。 df=pd.read\u csv(文件名,索引列=None,encoding=“utf8”,头=0,错误行=False,警告行=True,引擎=pyth

我下载了700个大型csv文件(excel csv文件)。该文件有逗号分隔符和15列。但是,在某些行中有16列。这是因为其中一列是我在其中创建了第16行的国家,例如“Korea,South”(数据没有被“”包围)

因此,我的问题是,如果我加载一个带有pandas.read_csv()的csv文件,我必须跳过不好的行(韩国的行),我想保留这些行。
df=pd.read\u csv(文件名,索引列=None,encoding=“utf8”,头=0,错误行=False,警告行=True,引擎=python')

因此,我继续使用open()并与韩国一起编辑行

with open(filename, 'r') as csvfile:
    
    csv_read = csv.reader(csvfile, delimiter=',')
    
    for row in csv_read:
        
        search_terms1 = ["Korea"]
        search_terms2 = ["South"]

        if any([term in row[2] for term in search_terms1]) and any([term in row[3] for term in search_terms2]):
            row[2] = row[3] + row[2]
            row.pop(3)
        
        if any([term in row[4] for term in search_terms1]) and any([term in row[5] for term in search_terms2]):
            row[4] = row[5] + row[4]
            row.pop(5)
        
        ARRAY.append(row)

df = pd.DataFrame(ARRAY)
我首先在我制作的一些虚拟数据上尝试了这种方法,效果非常好。但是,对于原始文件,它不起作用。我被跟踪了

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 82: character maps to <undefined>
utf-16-le也给出了警告

UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 14-15: illegal encoding
cp437给出了以下内容

Error: line contains NULL byte
我又尝试了几个编码。所有错误都发生在

----> 37     for row in csv_read:
注意:我使用VS代码,其中编码在windows上设置为“utf-8”。我不知道这个信息是否有用

所以我的问题是:
如何在不丢失错误行的情况下读取此文件?这是一个错误的编码问题还是我应该使用不同的方法来读取文件?

您使用的是Python 2吗?如果是,请考虑使用内置的<代码> CSV < /代码>模块。您应该能够使用pip安装它,然后
将unicodecsv作为csv导入
,使其成为一个替代品。

UTF-8可以用Unicode表示任何字符,包括阿拉伯语。问题显然是该文件没有使用UTF-8编码。如果文件包含俄文、阿拉伯文和韩文文本,那么我很确定它是用一种UTF(UTF-8、UTF-16、UTF-23)编码的,因为我认为没有其他编码可以同时支持它们。注意:对于UTF-16和UTF-32,有LE和BE变体,但是Python应该根据文件开头的BOM自动选择正确的。当然,文件也可能包含混合编码,这基本上意味着它已损坏。根据您的说法,鉴于CSV格式不完善,创建者也不太可能将编码弄糟:-(
----> 37     for row in csv_read: