Converter fluxo de entrada binário para o modo de texto
Eu estou tentando ler um arquivo CSV bzip2-comprimido no Python 3.2. Para um arquivo CSV descompactado, isso funciona:
datafile = open('./file.csv', mode='rt')
data = csv.reader(datafile)
for e in data: # works
process(e)
O problema é queBZ2File
suporta apenas a criação de um fluxo binárioe no Python 3,csv.reader
aceita apenas fluxos de texto. (O mesmo problema ocorre com arquivos gzip e zip).
datafile = bz2.BZ2File('./file.csv.bz2', mode='r')
data = csv.reader(datafile)
for e in data: # error
process(e)
Em particular, a linha indicada lança a exceção_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
.
Eu também tenteidata = csv.reader(codecs.EncodedFile(datafile, 'utf8'))
, mas isso não corrige o erro.
Como posso envolver o fluxo de entrada binária para que ele possa ser usado no modo de texto?