Python tarfile 大小

3

我可以这样计算tar文件中文件大小:

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

但是返回的总大小是tar文件中所有元素大小之和,而不是压缩文件的大小(至少在我的尝试中是这样)。 有没有一种方式可以获取整个tar文件的压缩大小,而不需要通过os.path.getsize之类的东西来检查它?


1
os.path.getsize 函数有什么问题吗? - orlp
1个回答

2

不。

tar.gz的工作原理是将文件通过gzip传输,以获取一个普通的tar归档文件。tar(1)并不知道归档文件在第一次被压缩时是如何被压缩的,因此它无法了解压缩大小[*]。

这与像ZIP这样的归档格式不同,ZIP可以自行压缩。

tar方法的优点是您可以使用任何喜欢的压缩程序。如果有更好的压缩程序出现,您可以轻松地重新打包您的归档文件。而且,由于所有内容都放入一个大数据流中,压缩比略高,元数据(如文件名)也被压缩。

缺点是您必须在归档文件中搜索以解压缩单个项目。

[*]: tar(1)的最初版本没有-z选项;当人们开始广泛使用gzip时,该选项才被添加。在早期,标准的压缩方式是使用compress来获得tar.Z


1
谢谢您的回答。我找到的解决方案是使用文件对象和st_size参数来获取大小。 - Cinquo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接