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 文件
- 将URL数据保存到文件对象。为此,您可以使用
StringIO.StringIO()
.
- 用
gzip.Gzipfile()
. 解压缩 .gz
- 从您的新文件对象中读取数据。
要使用您的示例:
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
我正在尝试从 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数据保存到文件对象。为此,您可以使用
StringIO.StringIO()
. - 用
gzip.Gzipfile()
. 解压缩 .gz
- 从您的新文件对象中读取数据。
要使用您的示例:
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