我有一个包含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)
答案 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为您提供了工作代码。