在 python 3 中读取 gzip 压缩的 csv 文件

reading gzipped csv file in python 3

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

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...

我在这里错过了什么?

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

试试看:

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

gzip.open 的默认模式是 rb,如果你想使用 strs,你必须额外指定它:

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

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

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

来不及了,可以在python

中使用datatable包
import datatable as dt
df = dt.fread(filename)
df.head()