2012-04-05 105 views
3

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

+1

“os.path.getsize”有什么问题? – orlp 2012-04-05 12:20:54

回答

2

的方式tar.gz的作品是该文件通过管道输送的gzip获得一个普通的tar归档。 tar(1)不知道压缩文件是在第一位,所以它不知道压缩大小[*]。

这不像ZIP压缩自己的档案格式。

tar方法的优点是可以使用任何你喜欢的压缩。如果有更好的压缩器出现,您可以轻松地重新包装您的档案。另外,因为所有东西都放在一个大的数据流中,所以压缩比稍微好一点,元数据如文件名也被压缩。

缺点是您必须在存档文件中寻找解压单个项目。 [*]:tar(1)的第一个实现没有-z选项;当人们开始大量使用gzip时,它被添加了。在早期,标准压缩使用compress得到tar.Z

+1

谢谢你的回答。我发现的解决方案是使用文件对象和st_size参数来获取大小。 – Cinquo 2012-04-10 08:16:13