使用python3中的csv模块读取csv文件时出错

时间:2020-09-06 05:09:17

标签: python-3.x

当我尝试读取一个csv文件时,出现这种错误:

Traceback (most recent call last):
  File "/root/Downloads/csvafa.py", line 4, in <module>
    for i in a:
  File "/usr/lib/python3.8/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

我使用的代码:

import csv
with open('Book1.csv') as f:
    a=csv.reader(f)
    for i in a:
        print(i)

我什至试图将编码更改为latin1:

import csv
with open('Book1.csv',encoding='latin1') as f:
    a=csv.reader(f)
    for i in a:
        print(i)

在那之后,我得到了这种类型的错误消息:

Traceback (most recent call last):
  File "/root/Downloads/csvafa.py", line 4, in <module>
    for i in a:
_csv.Error: line contains NUL

我是python的初学者

2 个答案:

答案 0 :(得分:1)

当我们尝试编码无效的字符串时,会引发此错误。如果无法使用此编码(UTF-8)表示Unicode字符串,则python会引发UnicodeEncodeError。您可以尝试编码:“ latin-1”或“ iso-8859-1”。

import pandas as pd
dataset = pd.read_csv('Book1.csv', encoding='ISO-8859–1')

也可能是数据已压缩。看看这个answer

答案 1 :(得分:0)

我会尝试以utf-8的形式读取文件

另一个解决方案可能是this answer

它仍然很有可能是压缩数据。 gzip的幻数为0x1f 0x8b,与您获得的UnicodeDecodeError一致。

您可以尝试动态解压缩数据:

  with open('destinations.csv', 'rb') as fd:
       gzip_fd = gzip.GzipFile(fileobj=fd)
      destinations = pd.read_csv(gzip_fd)
相关问题