Python tarfile大小

时间:2012-04-05 12:16:44

标签: python tarfile

我可以用这种方式计算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中元素的总和而不是压缩文件大小(至少这是我相信的尝试)。 有没有办法获得整个tar文件的压缩大小而不通过像os.path.getsize这样的东西检查?

1 个答案:

答案 0 :(得分:2)

没有

tar.gz的工作方式是通过gzip传输文件以获取普通的tar存档。 tar(1)不知道存档首先被压缩,所以它无法知道压缩大小[*]。

这与ZIP之类的归档格式不同,它们可以自行压缩。

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

缺点是你必须在档案文件中寻找解包个别物品。

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