2

BZ2Compressorオブジェクトを使用してファイルをbz2-compressするコードを作成しました。

def compressFile(file_name, new_name):      
    comp = bz2.BZ2Compressor()
    comFile = open(new_name, "wb")
    oldFile = open(file_name, "rb")
    while True:
        data = oldFile.read(1024*1024)
        if(len(data) == 0):
            break
        compressed = comp.compress(data)
        comFile.write(compressed)
    comp.flush()
    comFile.close()

エラーが発生せず、ファイルが作成されますが、アーカイブマネージャーでファイルを開きたい場合、非特定のエラーが発生します。私は自分の間違いを見つけることができず、このモジュールは十分に文書化されていません。

4

1 に答える 1

5

を使用するBZ2Compressorと、を呼び出したときにデータがチャンクで取得されます。compress()また、を呼び出したときにのみデータを取得する可能性がありますflush()

次のように関数を変更すると機能するはずです。

def compressFile(file_name, new_name):      
    comp = bz2.BZ2Compressor()
    comFile = open(new_name, "wb")
    oldFile = open(file_name, "rb")
    while True:
        data = oldFile.read(1024*1024)
        if(len(data) == 0):
            break
        comFile.write(comp.compress(data))
    comFile.write(comp.flush())
    comFile.close()
于 2012-11-18T21:55:49.423 に答える