1. ホーム
  2. python

[解決済み] python zipfile モジュールがファイルを圧縮していないようです。

2023-05-04 11:39:58

質問

ちょっとしたヘルパー関数を作りました。

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 __name__ == '__main__':
    main()  

問題は、すべてのファイルが圧縮されていないことです! ファイルは同じサイズで、事実上、拡張子が ".zip" に変更されているだけです (この場合は ".xls" から)。

私は、winXP sp2 で python 2.5 を実行しています。

どのように解決するのですか?

これは 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 __name__ == '__main__':
    main()  

更新情報 のドキュメントによると (python 3.7) によると、デフォルトの ZIP_STORED を上書きするために 'compression' 引数の値を指定する必要があります。利用可能なオプションは ZIP_DEFLATED、ZIP_BZIP2、ZIP_LZMA で、対応する zlib、bz2、lzma ライブラリが利用可能である必要があります。