7

我需要使用 Python zipfile 模块或 unix 命令行实用程序按需创建 ZIP 存档。

要压缩的资源通常 > 1GB 并且不一定对压缩友好。

我如何有效地估计它的创建时间/大小?

4

4 回答 4

16

从大文件中提取一堆小部分。可能有 64 个 64k 的块。随机选择。

连接数据,压缩它,测量时间和压缩比。由于您随机选择了文件的一部分,因此您压缩了具有代表性的数据子集。

现在您所要做的就是根据您的测试数据的时间来估计整个文件的时间。

于 2009-04-20T10:32:27.530 回答
3

我建议您测量制作特定尺寸拉链所需的平均时间。然后,您根据该度量计算估计值。但是,如果您不知道数据的压缩程度,我认为无论如何估计都会非常粗略。如果您要压缩的数据每次都具有非常相似的“配置文件”,您可能会做出更好的预测。

于 2009-04-20T10:31:13.587 回答
1

如果有可能从python模块获得进度回调,我建议找出每秒处理了多少字节(通过简单地存储文件中你在第二个开始的位置以及结束时的位置)。当您拥有有关计算机速度的数据时,您当然可以保存它,并将其用作下一个 zip 文件的基础。(我通常在显示时间预测之前收集大约 5 个样本)

使用此方法可以为您提供Microsoft 分钟数,因此当您获得更多样本时,您需要对其进行平均。如果您制作包含大量文件的 zip 文件,情况尤其如此,因为与 1 个大文件相比,压缩许多小文件时 ZIP 往往会变慢。

于 2009-04-20T10:41:08.430 回答
0

如果您使用ZipFile.write()方法将文件写入存档,则可以执行以下操作:

  1. 获取要压缩的文件列表及其相对大小
  2. 将一个文件写入存档并计算需要多长时间
  3. 根据写入的文件数量、文件大小和剩余文件数量计算 ETA。

但是,如果您只压缩一个非常大的文件,这将不起作用。我自己从来没有使用过 zip 模块,所以我不确定它是否可以工作,但是对于少量的大文件,也许你可以使用 ZipFile.writestr() 函数并读入/压缩你的文件块?

于 2009-04-20T10:39:00.773 回答