ファイル圧縮率の推定

ファイル圧縮率の推定

gzipファイルを完全に圧縮せずにファイルの圧縮可能性を推定するための迅速で汚い方法はありますかgzip

俺はできて、できるよbash、できるよ

bc <<<"scale=2;$(gzip -c file | wc -c)/$(wc -c <file)"

gzこれにより、ファイルをディスクに書き込むことなく圧縮要素を取得できます。これにより、gzディスク領域の節約効果が面倒を正当化するのに十分でない場合、ディスク上のファイルをそのバージョンに置き換えることを回避できます。ただし、このアプローチではファイルが完全に渡されますgzip。これは、出力がディスクwcに書き込まれるのではなく、パイプに渡されることです。

gzipファイルの内容全体を処理せずにファイルのおおよその圧縮推定値を取得する方法はありますか?

ベストアンサー1

以下は(おそらく同等の)Pythonバージョンです。スティーブン・チャジェラス 解決策

python -c "
import zlib
from itertools import islice
from functools import partial
import sys
with open(sys.argv[1], "rb") as f:
  compressor = zlib.compressobj()
  t, z = 0, 0.0
  for chunk in islice(iter(partial(f.read, 4096), b''), 0, None, 10):
    t += len(chunk)
    z += len(compressor.compress(chunk))
  z += len(compressor.flush())
  print(z/t)
" file

おすすめ記事