Convertir el flujo de entrada binario al modo de texto
Estoy intentando leer un archivo CSV comprimido con bzip2 en Python 3.2. Para un archivo CSV sin comprimir, esto funciona:
datafile = open('./file.csv', mode='rt')
data = csv.reader(datafile)
for e in data: # works
process(e)
El problema es eseBZ2File
Solo soporta la creación de un flujo binario., y en Python 3,csv.reader
acepta solo flujos de texto. (El mismo problema ocurre con los archivos gzip y zip.)
datafile = bz2.BZ2File('./file.csv.bz2', mode='r')
data = csv.reader(datafile)
for e in data: # error
process(e)
En particular, la línea indicada arroja la excepción._csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
.
También he intentadodata = csv.reader(codecs.EncodedFile(datafile, 'utf8'))
, pero eso no soluciona el error.
¿Cómo puedo ajustar el flujo de entrada binario para que se pueda utilizar en modo de texto?