圧縮された XML の複数の個別のストリームを含む zip ファイルが提供されました。圧縮ファイルは 833 MB です。
1 つのオブジェクトとして解凍しようとすると、最初のストリーム (約 19 kb) しか得られません。
古い質問への回答として提供された次のコードを変更して、各ストリームを解凍し、ファイルに書き込みました。
import zlib
outfile = open('output.xml', 'w')
def zipstreams(filename):
"""Return all zip streams and their positions in file."""
with open(filename, 'rb') as fh:
data = fh.read()
i = 0
print "got it"
while i < len(data):
try:
zo = zlib.decompressobj()
dat =zo.decompress(data[i:])
outfile.write(dat)
zo.flush()
i += len(data[i:]) - len(zo.unused_data)
except zlib.error:
i += 1
outfile.close()
zipstreams('payload')
infile.close()
このコードが実行され、目的の結果が生成されます (すべての XML データが 1 つのファイルに解凍されます)。問題は、作業に数日かかることです!
圧縮ファイルには何万ものストリームが含まれていますが、これははるかに高速なプロセスであるように思われます。833MB (推定 3GB raw) を解凍するのにおよそ 8 日かかります。
これをより効率的に行う別の方法はありますか、それとも速度が遅いのは、私が立ち往生している読み取り-解凍-書き込み---繰り返しのボトルネックの結果ですか?
あなたが持っているポインタや提案をありがとう!