Error on read gzip csv from url in Python: "_csv.Error: line contains NULL byte"

Error on read gzip csv from url in Python: "_csv.Error: line contains NULL byte"

我正在尝试从 url 中读取 gzip 压缩的 csv 文件。这是一个超过 50.000 行的非常大的文件。当我尝试下面的代码时出现错误:_csv.Error: line contains NULL byte

import csv
import urllib2   
url = '[my-url-to-csv-file].gz'
response = urllib2.urlopen(url)
cr = csv.reader(response)

for row in cr:
    if len(row) <= 1: continue
        print row

如果我在尝试读取文件之前尝试打印文件内容,我会得到类似这样的信息:

?M}?7?M==??7M???z?YJ?????5{Ci?jK??3b??p?

?[?=?j&=????=?0u'???}mwBt??-E?m??Ծ??????WM??wj??Z??ėe?D?VF????4=Y?Y?tA???

我怎样才能正确地从这个 URL 中读取 gzip 压缩的 csv 文件?

使用 try 和 except,如果您不关心遇到 NULL 行时会发生什么,只需使用 pass:

for row in cr:
    try:
        if len(row) <= 1: continue
            print row
    except Exception, e:
        print e
        #or if you're not worried about errors, you can use pass

如何使用 urllib2.urlopen

从 URL 打开 .gz (gzip) csv 文件
  1. 将URL数据保存到文件对象。为此,您可以使用 StringIO.StringIO().
  2. gzip.Gzipfile().
  3. 解压缩 .gz
  4. 从您的新文件对象中读取数据。

要使用您的示例:

from StringIO import StringIO
import gzip
import urllib2

url = '[my-url-to-csv-file].gz'
mem = StringIO(urlopen(url).read())
f = gzip.GzipFile(fileobj=mem, mode='rb')
data = f.read()

for line in data:
  print line