2015-05-19 5 views
5

У меня возникли проблемы с чтением из gsipped csv-файла с gzip и csv libs. Вот что я получил:чтение gzipped файла csv в python 3

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?) 

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

Что мне здесь не хватает?

ответ

10

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

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

OT: это хорошая практика записи операций ввода-вывода в блоке a:

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

yup, правильный. благодаря – WeaselFox

3

Вы открываете файл в двоичном режиме (which is the default for gzip).

Попробуйте вместо этого:

import gzip 
import csv 
f = gzip.open(filename, mode='rt') 
csvobj = csv.reader(f,delimiter = ',',quotechar="'") 
Смежные вопросы