2009-04-20 17 views
7

Python zipfileモジュールまたはunixコマンドラインユーティリティを使用して、必要に応じてZIPアーカイブを作成する必要があります。ジップサイズ/作成時間の見積もり

圧縮されるリソースは、しばしば1GBを超え、圧縮には適していません。

作成時間/サイズを効率的に見積もるにはどうすればよいですか?

+0

ファイルを作成する前または作成中に作成時間とサイズを見積もりましたか? –

+0

ZIP要求はキューに入れられます。 – ohnoes

+0

その場合は、私の答えを無視してNilsの承諾を受けてください:-) –

答えて

15

大きなファイルから小さな部分を抽出します。おそらく、それぞれ64kの64個のチャンク。ランダムに選択されています。

データを連結し、圧縮し、時間と圧縮率を測定します。ファイルの一部をランダムに選択したので、データの代表的なサブセットを圧縮している可能性があります。

これで、テストデータの時間に基づいてファイル全体の時間を見積もるだけで済みます。

+0

これは私より優れたアイデアです。 +1。 – Skurmedel

3

特定のサイズのジップを作成するのにかかる平均時間を測定することをお勧めします。次に、その測定値から推定値を計算します。しかし、データがどれくらいうまく圧縮されているかわからないと、推定値は非常に粗いと思います。あなたがおそらくより良い予測をするたびに、圧縮したいデータが非常に似た「プロファイル」を持っていたら。

0

アーカイブにファイルを書き込むことがZipFile.write()メソッドを使用している場合は、次の操作を行うことができます:

  1. あなたはジップしたいファイルのリストとそれらの相対的なサイズ
  2. 書き込みをゲット1つのファイルをアーカイブに保存し、所要時間を確認する
  3. 書き込まれたファイルの数、サイズ、残量に基づいてETAを計算します。

本当に1つの大きなファイルを圧縮しているだけの場合は、これは機能しません。私は自分でzipモジュールを使用したことがないので、それがうまくいくかどうかはわかりませんが、少数の大きなファイルの場合は、ZipFile.writestr()関数を使用してファイルをzipファイルで読み込みます?

1

もし、pythonモジュールからの進捗状況のコールバックを得ることができれば、何秒間処理されたかを調べることをお勧めします(ファイルのどこに2番目の場所にどこに格納するか、 )。コンピュータの速度に関するデータがあれば、それを保存して次のzipファイルの基礎として使用することができます。 (私は通常、時間の予兆を示す前に約5つのサンプルを収集します)

この方法を使用すると、平均する必要があるより多くのサンプルが得られるので、Microsoft minutesを得ることができます。これは、ZIPが1つの大きなファイルと比較して多くの小さなファイルを圧縮するときに遅くなる傾向があるため、たくさんのファイルを含むZIPファイルを作成する場合に当てはまります。

関連する問題