我有一個(gè)生成數(shù)據(jù)的迭代器,我想將其解壓縮。import gziph = open('myfile.gz', 'rb')data = iter(lambda: h.read(1024), b'')gzip.decompress(data)我得到:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.6/gzip.py", line 531, in decompress with GzipFile(fileobj=io.BytesIO(data)) as f:TypeError: a bytes-like object is required, not 'callable_iterator'如何解壓迭代器?數(shù)據(jù)無法加載到內(nèi)存中。
2 回答

HUX布斯
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
如何解壓迭代器?
你不知道。gzip.decompress()
不適用于任意迭代器。您需要將迭代器轉(zhuǎn)換為字節(jié)流,以便gzip.decompress()
. 我會(huì)先看看BytesIO
.

一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
import zlib
def unzip_iterable(data):
decompressor = zlib.decompressobj(wbits=zlib.MAX_WBITS | 16) # gzip format
for chunk in data:
yield decompressor.decompress(chunk)
h = open('myfile.gz', 'rb')
data = iter(lambda: h.read(1024), b'')
for chunk in unzip_iterable(data):
print(len(chunk))
添加回答
舉報(bào)
0/150
提交
取消