3

我可以通过这种方式计算 tarfile 中文件的大小:

import tarfile
tf = tarfile.open(name='my.tgz', mode='r')
reduce(lambda x,y: getattr(x, 'size', x)+getattr(y,'size',y), tf.getmembers())

但返回的总大小是 tarfile 中元素的总和,而不是压缩文件的大小(至少这是我通过尝试这样做所相信的)。有没有办法在不通过 os.path.getsize 之类的东西检查的情况下获得整个 tar 文件的压缩大小?

4

1 回答 1

2

不。

tar.gz 的工作方式是通过 gzip 管道传输文件以获取普通的 tar 存档。tar(1) 不知道存档一开始就被压缩了,所以它不知道压缩后的大小[*]。

这与 ZIP 等自行压缩的存档格式不同。

tar 方法的优点是您可以使用任何您喜欢的压缩方式。如果出现更好的压缩器,您可以轻松地重新打包您的档案。此外,由于所有内容都放入一个大数据流中,因此压缩率稍好,文件名等元数据也被压缩。

缺点是您必须在存档文件中查找以解压缩单个项目。

[*]: tar(1) 的第一个实现没有 -z 选项;后来人们开始大量使用 gzip 时添加了它。在早期,标准压缩compress用于获取tar.Z.

于 2012-04-05T12:22:51.953 回答