在tarball中找到最大的文件

时间:2013-12-07 21:36:11

标签: python gzip tar

我有一个包含13000个文件的大量gzip压缩包。如何从Python程序中仅提取其中最大的文件?

我已经尝试通过tarball读取并检查每个文件提取的长度,但这花费的时间太长了。有没有更优化的方法来做到这一点?

原始代码(为了完整性而添加,即使选择了答案):

from tarfile import TarFile
archive = TarFile(filename)
members = archive.getmembers()
sizes = []
for member in members:
    sizes.append(member.size)
largest = max(sizes)
largest_info = sizes.index(largest)
print(largest_info.name)

2 个答案:

答案 0 :(得分:3)

你看过the documentation吗?

import tarfile
archive = tarfile.TarFile('/path/to/my/tarfile.tar')
max_size = 0
max_name = None
for file in archive.getmembers():
    if file.size > max_size:
        max_size = file.size
        max_name = file.name

print(max_size)
print(max_name)

答案 1 :(得分:2)

答案是你必须浏览所有档案以找出最大的成员。这是因为TAR文件是为类型归档而设计的,因此没有目录(TOC):

  

不使用信息的集中位置的可能原因是tar最初是用于磁带,无论如何都是随机访问的:如果目录(TOC)位于归档的开头,创建它将意思是首先计算所有文件的所有位置,这需要加倍工作,大缓存,或者在编写所有内容以写入TOC后重绕磁带

Simeon Visser为您提供了工作代码。