私はこれを簡単にテストしました、そしてそれは正しいことをするようです。ファイルobjを提供することができgzip.GzipFile
ますio.open
。
import io
import gzip
f_obj = open('file.gz','r')
io_obj = io.open(f_obj.fileno(), encoding='UTF-8')
gzip_obj = gzip.GzipFile(fileobj=io_obj, mode='r')
gzip_obj.read()
UnicodeDecodeError
私が読んでいるファイルは実際にはUTF-8ではないので、それは私に与えます。それで、それは正しいことをしているように見えます。
何らかの理由で、直接io.open
開くために使用すると、ファイルは圧縮ファイルではないと表示されます。file.gz
gzip
更新
ええ、それはばかげています、ストリームはそもそも間違った方法です。
テストファイル
ö
ä
u
y
次のコードは、定義されたコーデックで圧縮ファイルをデコードします
import codecs
import gzip
gz_fh = gzip.open('file.gz')
ascii = codecs.getreader('ASCII')
utf8 = codecs.getreader('UTF-8')
ascii_fh = ascii(gz_fh)
utf8_fh = utf8(gz_fh)
ascii_fh.readlines()
-> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
utf8_fh.readlines()
-> [u'\xf6\n', u'\xe4\n', u'u\n', u'y']
はcodecs.StreamReader
ストリームを取得するため、圧縮ファイルまたは非圧縮ファイルをストリームに渡すことができるはずです。
http://docs.python.org/library/codecs.html#codecs