我有一个包含许多文件的大型zip文件,我希望通过块解压缩以避免消耗太多内存。
我尝试使用python模块zipfile
,但我找不到通过chunk加载存档并将其提取到磁盘上的方法。
在python中有没有简单的方法呢?
修改
@ steven-rumbalski正确指出zipfile
通过逐个解压缩文件而不加载完整档案来正确处理大文件。
我的问题是我的zip文件在AWS S3上,并且我的EC2实例无法在RAM中加载这么大的文件,所以我通过块下载它,我想用块解压缩它。
答案 0 :(得分:4)
您不需要以特殊方式将大型存档提取到磁盘。源Lib/zipfile.py表明zipfile
已经具有内存效率。创建zipfile.ZipFile
对象不会将整个文件读入内存。相反,它只是读取ZIP文件的目录。 ZipFile.extractall()
使用shutil.copyfileobj()
的子类io.BufferedIOBase
复制,一次提取一个一个文件。
如果您只想进行一次性提取,Python会从命令行提供一个快捷方式:
python -m zipfile -e archive.zip target-dir/
答案 1 :(得分:0)
您可以使用zipfile(或可能是tarfile),如下所示:
import zipfile
def extract_chunk(fn, directory, ix_begin, ix_end):
with zipfile.ZipFile("{}/file.zip".format(directory), 'r') as zf:
infos = zf.infolist()
print(infos)
for ix in range(max(0, ix_begin), min(ix_end, len(infos))):
zf.extract(infos[ix], directory)
zf.close()
directory = "path"
extract_chunk("{}/file.zip".format(directory), directory, 0, 50)