Python 3.2 で bzip2 圧縮された CSV ファイルを読み込もうとしています。圧縮されていない CSV ファイルの場合、これは機能します。
datafile = open('./file.csv', mode='rt')
data = csv.reader(datafile)
for e in data: # works
process(e)
問題はBZ2File
、バイナリ ストリームの作成のみをサポートし、Python 3 ではcsv.reader
テキスト ストリームのみを受け入れることです。(gzip および zip ファイルでも同じ問題が発生します。)
datafile = bz2.BZ2File('./file.csv.bz2', mode='r')
data = csv.reader(datafile)
for e in data: # error
process(e)
特に、示された行は例外をスローします_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
。
も試しましdata = csv.reader(codecs.EncodedFile(datafile, 'utf8'))
たが、エラーは修正されません。
テキストモードで使用できるように、バイナリ入力ストリームをラップするにはどうすればよいですか??