2013-04-22 12 views
10

多数のファイルを1つのzipファイルに圧縮するPython 2.7.4 zipfileモジュール(ZIP_DEFLATED)に比べて、はるかに高速な代替手段がありますか?私はczipfile https://pypi.python.org/pypi/czipfile/1.0.0を見ましたが、それは解読の高速化(圧縮しない)に焦点を当てているようです。Pythonのzipfileモジュールの代わりにもっと速い?

サイズが〜1MB〜6MB(すべてのファイルが〜9GB)の各ファイルで、大量のイメージファイル(.exrファイルと.tiffファイルの組み合わせで〜12,000ファイル)を処理する必要があります。 )を1つのzipファイルにまとめて出荷します。この圧縮には処理に約90分かかります(Windows 7 64ビットで実行)。

zipfileモジュールよりも短時間で多数のファイルを単一の.zipファイルに圧縮できる、別のPythonモジュール(あるいはC/C++ライブラリまたはスタンドアロンツール)をお勧めする人は誰でもそれは非常に高く評価されます(5〜10%近く近いもの(またはそれ以上)は非常に役に立ちます)。

+2

最悪の場合、シェルを呼び出してPythonの7zipのようなものを実行することができます – Patashu

+1

圧縮しているイメージファイルは、それぞれのファイル形式の圧縮バージョンを使用していますか?もしそうなら、ZIP_STOREDの代わりにZIP_DEFLATEDを使うことで、少しの利益でそれらをもう一度圧縮しようとするとかなりの処理時間を無駄にする可能性があります。また、Python 2と3の両方のドキュメントでは、['zipfile'](http://docs.python.org/2/library/zipfile.html#module-zipfile)モジュールは、暗号化されたファイルの解読のみをサポートしていますZIPアーカイブ、それらを作成しない - これはどのように正確に行うのですか? – martineau

+0

@Patashu提案してくれてありがとう、私は試してみて、パフォーマンスをテストします。ファイルは.zipファイルである必要があります。そうでなければ、他のパッキングフォーマットでもっと実験します。 –

答えて

4

パタシュ(Patashu)が述べているように、7-zipへのアウトソーシングがベストアイデアかもしれません。

import os 
import subprocess 

path_7zip = r"C:\Program Files\7-Zip\7z.exe" 
path_working = r"C:\temp" 
outfile_name = "compressed.zip" 
os.chdir(path_working) 

ret = subprocess.check_output([path_7zip, "a", "-tzip", outfile_name, "*.txt", "*.py", "-pSECRET"]) 

マーティはあなたが圧縮方法を試してみるかもしれません述べたように:ここで

はあなたが始めるためにいくつかのサンプルコードです。 This pageには、コマンドラインパラメータを変更する方法の例がいくつか示されています。

+1

助けをいただきありがとうございます。 .exrファイルの1GBサブセットの7-zipへのアウトソーシングは、zipfile圧縮と比較して圧縮時間を約52%短縮しました。私はまだ@martineauが7zipの調整された設定と比較して提案した非圧縮バージョンでいくつかのテストを実行していますが、7zipソリューションは間違いなく改善のようです。 –

+1

@ michaelhubbard.ca:7-Zipを使うのは良い選択です。このようなことのための優れたユーティリティです。 「7za.exe」と呼ばれるコマンドラインのみのバージョンは574KBで、おそらく必要なものだけがあることに注意してください。また、コメントをどこかに追加して、vs圧縮との違いだけを教えてください。 – martineau

+0

@ michaelhubbard.ca:7-Zipには、あなたがそのオプションに興味があると言って以来、非常に優れた暗号化オプションがあるということを忘れていました。フォローアップと追加情報のおかげで@martineauありがとうございます。 – martineau

関連する問題