Konwertuj strumień wejściowy binarny na tryb tekstowy
Próbuję odczytać plik CSV skompresowany za pomocą bzip2 w Pythonie 3.2. W przypadku nieskompresowanego pliku CSV działa to:
datafile = open('./file.csv', mode='rt')
data = csv.reader(datafile)
for e in data: # works
process(e)
Problemem jestBZ2File
obsługuje tylko tworzenie strumienia binarnego, iw Pythonie 3,csv.reader
akceptuje tylko strumienie tekstowe. (Ten sam problem występuje w przypadku plików gzip i zip.)
datafile = bz2.BZ2File('./file.csv.bz2', mode='r')
data = csv.reader(datafile)
for e in data: # error
process(e)
W szczególności wskazana linia zgłasza wyjątek_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
.
Próbowałem teżdata = csv.reader(codecs.EncodedFile(datafile, 'utf8'))
, ale to nie naprawia błędu.
Jak mogę zawinąć binarny strumień wejściowy, aby mógł być używany w trybie tekstowym?