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 中元素的总和,而不是压缩文件的大小(至少这是我通过尝试相信的)。 有没有办法在不通过 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/

相关文章:

python - 为什么我可以使用 tsql 连接到 Azure MS SQL,但不能使用 pymssql?

python - 使用 dtype float 将 pandas.Multiindex 转换为 numpy.ndarray

python - 在 python 中创建列表的一部分的别名

Python tarfile 和排除

python - 在python中,如果提取一个tar.gz文件,如何获取或设置结果文件的名称

python - 基于另一个表中的值的简单 SQLAlchemy 更新表

python - 格式化列表python的元素

python - tar (Unix) 和 tarfile (Python) 之间的根本区别是什么?

python - 使用 Python 从只有基本名称的 tarfile 中提取文件

python - 使用 Python 的 tarfile 时覆盖现有的只读文件