Python文件大小

Python文件大小,python,tarfile,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

我可以通过以下方式计算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之类的东西进行检查?

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

这与压缩文件格式(如ZIP)不同,ZIP是自己压缩的

tar方法的优点是您可以使用任何您喜欢的压缩。如果有更好的压缩机出现,你可以很容易地重新打包你的档案。此外,由于所有内容都放在一个大的数据流中,因此压缩比稍好一些,而且还压缩了元数据(如文件名)

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


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

os.path.getsize有什么问题吗?谢谢你的回答。我找到的解决方案是使用file对象和st_size参数来获取大小。