2017-10-31 11 views
0

ターゲット圧縮レベルのzipアーカイブにフォルダを圧縮したいとします。圧縮レベルは、0〜9の範囲の任意の値にすることができます。 python3でこれを行う方法はありますか?ターゲット圧縮レベルのPython zipファイル

私が知っている、zipfileライブラリが存在しますが、それはソースに次の文字列が含まれています

# constants for Zip file compression methods 
ZIP_STORED = 0 
ZIP_DEFLATED = 8 
ZIP_BZIP2 = 12 
ZIP_LZMA = 14 
# Other ZIP compression methods not supported 

だから、このツールは私の問題を解決するための方法を提供していません。

また、zipfileライブラリはzlibライブラリを使用しています。ライブラリには、ターゲット圧縮レベルで圧縮するためのメソッドが含まれています。しかし、ライブラリはディレクトリを扱うためのツールを提供しておらず、すべてのファイルを含むディレクトリをバイト配列に正しく変換する方法はわかりません。

+1

実際には圧縮レベルではなく、圧縮*メソッド*です。いくつかの/ほとんどの圧縮方法は、作業量と圧縮率のバランスをとる圧縮値を持つことができます。 –

答えて

0

私はこの問題を解決しました。 前述したように、zipfileライブラリはzlibライブラリを使用します。 zlibライブラリのデフォルトのパラメータとデフォルトの圧縮レベルが使用されます。だから、私は次のステップを実行します:

prev_compression = zipfile.zlib.Z_DEFAULT_COMPRESSION 
zipfile.zlib.Z_DEFAULT_COMPRESSION = compression_level # f.e. 1 
ar = zipfile.ZipFile(out, 'w', compression=zipfile.ZIP_DEFLATED) 
# add files to the ar 
zipfile.zlib.Z_DEFAULT_COMPRESSION = prev_compression 

スパイクのように見えますが、今はうまくいくと思います。それは私にとって最高の解決策です。

関連する問題