web-dev-qa-db-ja.com

python zipfileモジュールは私のファイルを圧縮していないようです

私は少しヘルパー関数を作りました:

import zipfile

def main(archive_list=[],zfilename='default.Zip'):
    print zfilename
    zout = zipfile.ZipFile(zfilename, "w")
    for fname in archive_list:
        print "writing: ", fname
        zout.write(fname)
    zout.close()

if __== '__main__':
    main()  

問題は、すべてのファイルが圧縮されていないことです!ファイルは同じサイズであり、事実上、拡張子のみが「.Zip」に変更されています(この場合は「.xls」から)。

WinXP sp2でpython 2.5を実行しています。

54
Ramy

これは、ZipFileで圧縮方法を指定する必要があるためです。指定しない場合、圧縮方法はzipfile.Zip_STOREDであると想定されます。これは、ファイルを圧縮せずに保存するだけです。メソッドをzipfile.Zip_DEFLATEDに指定する必要があります。このためにzlibモジュールをインストールする必要があります(デフォルトでは通常がインストールされています)。

import zipfile

def main(archive_list=[],zfilename='default.Zip'):
    print zfilename
    zout = zipfile.ZipFile(zfilename, "w", zipfile.Zip_DEFLATED) # <--- this is the change you need to make
    for fname in archive_list:
        print "writing: ", fname
        zout.write(fname)
    zout.close()

if __== '__main__':
    main()  
117
Chinmay Kanchi

Zip形式を圧縮する非常に簡単な方法があります。

で使用 shutil.make_archive 図書館。

例えば:

import shutil

shutil.make_archive(file_name, 'Zip', file location after compression)

より詳細なドキュメントを参照できます: Here

7
Gavriel Cohen