20

Python 2.4 と組み込みZipFileライブラリを使用すると、圧縮されていないファイルの内容全体をメモリに保存する必要があるため、非常に大きな zip ファイル (1 または 2 GB を超える) を読み取ることができません。これを行う別の方法はありますか(サードパーティのライブラリまたはその他のハックを使用)、または「シェルアウト」してその方法で解凍する必要があります(明らかにクロスプラットフォームではありません)。

4

2 に答える 2

19

大容量ファイルの解凍の概要は次のとおりです。

import zipfile
import zlib
import os

src = open( doc, "rb" )
zf = zipfile.ZipFile( src )
for m in  zf.infolist():

    # Examine the header
    print m.filename, m.header_offset, m.compress_size, repr(m.extra), repr(m.comment)
    src.seek( m.header_offset )
    src.read( 30 ) # Good to use struct to unpack this.
    nm= src.read( len(m.filename) )
    if len(m.extra) > 0: ex= src.read( len(m.extra) )
    if len(m.comment) > 0: cm= src.read( len(m.comment) ) 

    # Build a decompression object
    decomp= zlib.decompressobj(-15)

    # This can be done with a loop reading blocks
    out= open( m.filename, "wb" )
    result= decomp.decompress( src.read( m.compress_size ) )
    out.write( result )
    result = decomp.flush()
    out.write( result )
    # end of the loop
    out.close()

zf.close()
src.close()
于 2008-12-04T03:08:28.377 に答える