在python中通过块解压缩文件夹

时间:2017-02-23 14:08:19

标签: python python-3.x unzip

我有一个包含许多文件的大型zip文件,我希望通过块解压缩以避免消耗太多内存。

我尝试使用python模块zipfile,但我找不到通过chunk加载存档并将其提取到磁盘上的方法。

在python中有没有简单的方法呢?

修改

@ steven-rumbalski正确指出zipfile通过逐个解压缩文件而不加载完整档案来正确处理大文件。

我的问题是我的zip文件在AWS S3上,并且我的EC2实例无法在RAM中加载这么大的文件,所以我通过块下载它,我想用块解压缩它。

2 个答案:

答案 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)