是否有一种快速而肮脏的方法来估计gzip
文件的可压缩性而不必完全压缩它gzip
?
我可以,在bash
,做
bc <<<"scale=2;$(gzip -c file | wc -c)/$(wc -c <file)"
Run Code Online (Sandbox Code Playgroud)
这为我提供了压缩系数,而无需将gz
文件写入磁盘;这样我就可以避免用它的gz
版本替换磁盘上的文件,如果由此产生的磁盘空间节省不能证明这个问题是合理的。但是通过这种方法,文件确实完全通过了gzip
;只是输出通过管道传输到wc
而不是写入磁盘。
有没有办法在不gzip
处理所有内容的情况下对文件进行粗略的压缩性估计?
这是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
Run Code Online (Sandbox Code Playgroud)
例如,您可以尝试每 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}'
Run Code Online (Sandbox Code Playgroud)
(此处为 4K 块)。
归档时间: |
|
查看次数: |
2801 次 |
最近记录: |