我可以用这种方式计算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这样的东西检查?
答案 0 :(得分:2)
没有
tar.gz的工作方式是通过gzip传输文件以获取普通的tar存档。 tar(1)不知道存档首先被压缩,所以它无法知道压缩大小[*]。
这与ZIP之类的归档格式不同,它们可以自行压缩。
tar方法的优点是您可以使用任何您喜欢的压缩。如果有更好的压缩器出现,您可以轻松地重新打包您的档案。此外,由于所有内容都放在一个大数据流中,因此压缩率稍好一些,文件名等元数据也会被压缩。
缺点是你必须在档案文件中寻找解包个别物品。
[*]:tar(1)的第一个实现没有-z选项;后来当人们开始大量使用gzip时添加了它。在早期,标准压缩使用compress
来获取tar.Z
。