在python 3中阅读gzipped csv文件

时间:2015-05-19 11:35:18

标签: python csv gzip

我在使用gzipcsv库的gzip压缩文件中读取时遇到问题。这就是我得到的:

import gzip
import csv
import json

f = gzip.open(filename)
csvobj = csv.reader(f,delimiter = ',',quotechar="'")
for line in csvobj:
            ts = line[0]
            data_json = json.loads(line[1])

但这会引发异常:

 File "C:\Users\yaronol\workspace\raw_data_from_s3\s3_data_parser.py", line 64, in download_from_S3
    self.parse_dump_file(filename)
  File "C:\Users\yaronol\workspace\raw_data_from_s3\s3_data_parser.py", line 30, in parse_dump_file
    for line in csvobj:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
解压缩文件并用csv打开它可以正常工作。我还尝试解码文件文本以从字节转换为str ...

我在这里缺少什么?

3 个答案:

答案 0 :(得分:16)

gzip.open的默认模式为rb,如果您希望使用strs,则需要额外指定:

f = gzip.open(filename, mode="rt")

OT:在with块中编写I / O操作是一个好习惯:

with gzip.open(filename, mode="rt") as f:

答案 1 :(得分:3)

您正在以二进制模式打开文件(which is the default for gzip)。

尝试改为:

import gzip
import csv
f = gzip.open(filename, mode='rt')
csvobj = csv.reader(f,delimiter = ',',quotechar="'")

答案 2 :(得分:1)

为时已晚,您可以在python中使用datatable包

import datatable as dt
df = dt.fread(filename)
df.head()