在python中按块解压缩文件夹

2024-09-30 06:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的zip文件,其中包含许多文件,我想将其分块解压缩,以避免占用太多内存。在

我试图使用python模块zipfile,但我没有找到一种方法来按块加载归档文件并将其提取到磁盘上。在

在python中有没有简单的方法可以做到这一点?在

编辑

@steven rumbalski正确地指出zipfile正确地处理大文件,方法是逐个解压缩文件,而不加载完整的归档文件。在

我的问题是我的zip文件在aws3上,我的EC2实例无法在RAM中加载这么大的文件,所以我分块下载,我想按块解压缩。在


Tags: 模块文件实例方法内存编辑zipec2
2条回答

您可以使用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)

您不需要一种特殊的方法来将大型归档文件提取到磁盘。源文件Lib/zipfile.py显示{}已经具有内存效率。创建zipfile.ZipFile对象不会将整个文件读入内存。相反,它只是读取ZIP文件的目录。ZipFile.extractall()使用shutil.copyfileobj()io.BufferedIOBase的子类复制,一次提取一个文件。在

如果您只想进行一次性提取,则Python将从命令行提供快捷方式:

python -m zipfile -e archive.zip target-dir/

相关问题 更多 >

    热门问题