【发布时间】:2021-01-12 00:04:40
【问题描述】:
我正在尝试编写一个程序,在 GZIP 压缩时将大型数据集拆分为目标大小 target 或更小的较小数据集。
到目前为止,我想出的最好方法是只跟踪我迄今为止看到的数据的原始字符串长度,并通过一些 GZIP 压缩比猜测来估计最终大小。不过,这会导致一些相当大的偏差。大多数情况下,估计大小在我的目标的 20% 以内,但有时我会得到比我的估计预测大 100% 的文件。
此外,压缩估计似乎是周期性的。因此,如果我想要 10MB 的文件,我最终会得到大部分 10MB 的文件,然后在文件大小分布中集中为 20、30、40 MB。
那么,有没有什么方法可以对输出压缩文件的大小进行即时有根据的猜测,而到目前为止还没有实际压缩组装的流?是否可以使用不同的压缩格式?我不需要它是完美的,但我确实希望它接近。
伪代码示例(实际上我可以使用 java、python 或 scala 来完成此操作。这只是说明性的):
COMPRESSION_RATIO_GUESS = 20
targetSize = 10 * 1024 * 1024
with open("bigfile.txt","r") as f:
so_far = 0
for line in f.readlines():
so_far += len(line)
if so_far/COMPRESSION_RATIO_GUESS > targetSize:
# start new file, write rows so far
【问题讨论】:
标签: compression gzip