4

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'))たが、エラーは修正されません。

テキストモードで使用できるように、バイナリ入力ストリームをラップするにはどうすればよいですか??

4

1 に答える 1

5

これは私のために働く:

import codecs, csv
f = codecs.open("file.csv", "r", "utf-8")
g = csv.reader(f)
for e in g:
    print(e)

BZ2の場合:

import codecs, csv, bz2
f = bz2.BZ2File("./file.csv.bz2", mode="r")
c = codecs.iterdecode(f, "utf-8")
g = csv.reader(c)
for e in g:
    print(e)
于 2012-05-09T04:22:44.693 に答える