7

Python zipfile モジュールまたは UNIX コマンド ライン ユーティリティを使用して、必要に応じて ZIP アーカイブを作成する必要があります。

多くの場合、圧縮されるリソースは 1GB を超えており、必ずしも圧縮に適しているとは限りません。

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

4

4 に答える 4

16

大きなファイルから小さなパーツの束を抽出します。たぶん、それぞれ64kの64個のチャンク。ランダムに選択されます。

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

あとは、テスト データの時間に基づいてファイル全体の時間を見積もるだけです。

于 2009-04-20T10:32:27.530 に答える
3

特定のサイズの zip を生成するのにかかる平均時間を測定することをお勧めします。次に、そのメジャーから見積もりを計算します。ただし、データがどれだけ圧縮されているかがわからない場合、見積もりはいずれにせよ非常に大雑把になると思います。圧縮したいデータが毎回非常に似た「プロファイル」を持っていれば、おそらくより良い予測ができるでしょう。

于 2009-04-20T10:31:13.587 に答える
1

Python モジュールからプログレス コールバックを取得できる場合は、1 秒間に処理されるバイト数を調べることをお勧めします (単純に、ファイル内のどこに 2 番目の開始位置と終了位置を格納するかによって)。コンピューターの速度に関するデータを取得したら、もちろんそれを保存して、次の zip ファイルの基礎として使用できます。(私は通常、時間予測を表示する前に約 5 つのサンプルを収集します)

この方法を使用すると、マイクロソフトの議事録が得られるため、より多くのサンプルを取得して平均化する必要があります。これは特に、多数のファイルを含む zip ファイルを作成する場合に当てはまります。1 つの大きなファイルと比較して、多数の小さなファイルを圧縮すると ZIP の速度が低下する傾向があるためです。

于 2009-04-20T10:41:08.430 に答える
0

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

  1. 圧縮したいファイルとそれらの相対的なサイズのリストを取得します
  2. 1 つのファイルをアーカイブに書き込み、それにかかった時間を計る
  3. 書き込まれたファイルの数、ファイルのサイズ、および残りの量に基づいて ETA を計算します。

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

于 2009-04-20T10:39:00.773 に答える