чтение gzipped csv-файла в python 3

у меня проблемы с чтением из файла gzipped csv с gzip и csv libs. Вот что я получил:

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:Usersyaronolworkspaceraw_data_from_s3s3_data_parser.py", line 64, in download_from_S3
    self.parse_dump_file(filename)
  File "C:Usersyaronolworkspaceraw_data_from_s3s3_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?)

gunzipping файл и открытие, что с csv работает нормально. Я также попытался декодировать текст файла для преобразования из байтов в str...

что я пропустила?

2 ответов


режим по умолчанию для gzip.open и rb, Если вы хотите работать с strs, вы должны указать его дополнительно:

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

OT: рекомендуется писать операции ввода-вывода в блоке with:

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

вы открываете файл в двоичном режиме (по умолчанию для gzip).

вместо:

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