2015-05-19 8 views
5

Mam problemy z odczytaniem z pliku CSV z gzipem z bibliotekami gzip i csv. Oto co mam:czytanie skompresowanego pliku csv w pythonie 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]) 

ale zgłasza wyjątek:

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 plik i otwarcie, że z CSV działa dobrze. Próbowałem również odszyfrować tekst pliku, aby przekonwertować z bajtów na str ...

Czego mi tu brakuje?

Odpowiedz

10

tryb domyślny dla gzip.open jest rb, jeśli chcesz pracować z Strs, trzeba określić go dodatkowo:

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

OT: jest to dobra praktyka do pisania operacji we/wy w jednym bloku:

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

Tak, zgadza się. Dzięki – WeaselFox

3

Otwierasz plik w trybie binarnym (which is the default for gzip).

Spróbuj zamiast:

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