我正在尝试从网址中读取gzip压缩文件。这是一个超过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 {次?JK ?? 3b中&Delta; P?
[= J&安培;?????= ???? = 0U'???} mwBt ?? - 电子M2 +Ծ?????? WM ?? WJ ??ž ?? EE?d?VF ???? 4 = Y?Y'TA ???
如何正确读取此网址中的gzip压缩文件?
答案 0 :(得分:2)
如何使用urllib2.urlopen
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
答案 1 :(得分:0)
使用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