Compression
估計文件的可壓縮性
是否有一種快速而骯髒的方法來估計
gzip
文件的 -compressibility 而不必完全壓縮它gzip
?我可以,在
bash
,做bc <<<"scale=2;$(gzip -c file | wc -c)/$(wc -c <file)"
這給了我壓縮因子,而無需將
gz
文件寫入磁碟;gz
這樣,如果節省的磁碟空間不能證明麻煩,我可以避免用它的版本替換磁碟上的文件。但是通過這種方法,文件確實完全通過gzip
;只是輸出通過管道傳輸wc
而不是寫入磁碟。有沒有辦法在不
gzip
處理所有內容的情況下對文件進行粗略的可壓縮性估計?
例如,您可以嘗試每 10 個塊壓縮一個塊來獲得一個想法:
perl -MIPC::Open2 -nE 'BEGIN{$/=\4096;open2(\*I,\*O,"gzip|wc -c")} if ($. % 10 == 1) {print O $_; $l+=length} END{close O; $c = <I>; say $c/$l}'
(這裡有 4K 塊)。
這是Stephane Chazelas 解決方案的(希望是等效的)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