我可以用这种方式计算 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 中元素的总和,而不是压缩文件的大小(至少这是我通过尝试相信的)。 有没有办法在不通过 os.path.getsize 之类的东西检查的情况下获取整个 tar 文件的压缩大小?
最佳答案
没有。
tar.gz 的工作方式是通过 gzip 管道传输文件以获得普通的 tar 存档。 tar(1) 不知道压缩文件首先被压缩,所以它不知道压缩后的大小[*]。
这与 ZIP 等自行压缩的存档格式不同。
tar 方法的优点是您可以使用任何您喜欢的压缩方式。如果出现更好的压缩器,您可以轻松地重新打包您的文件。此外,由于所有内容都放入一个大数据流中,压缩率稍微好一些,并且文件名等元数据也被压缩。
缺点是您必须在存档文件中查找才能解压单个项目。
[*]:tar(1) 的第一个实现没有 -z 选项;它是后来人们开始大量使用 gzip 时添加的。早期的标准压缩是使用compress
得到tar.Z
。
关于Python tarfile 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028435/