在 python 3 中读取 gzip 压缩的 csv 文件
reading gzipped csv file in python 3
我在使用 gzip
和 csv
库读取 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()
我在使用 gzip
和 csv
库读取 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()