我在使用gzip
和csv
库的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 ...
我在这里缺少什么?
答案 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()