如何以内存有效的方式将大量文件添加到 zip 中?

Posted

技术标签:

【中文标题】如何以内存有效的方式将大量文件添加到 zip 中?【英文标题】:How to add large quantities of files to zip in a memory efficient way? 【发布时间】:2014-04-21 14:35:22 【问题描述】:

我对优化程序以提高内存效率有点陌生,所以这似乎有点初级:如果我打算将数百个文件(可能 100mb+)添加到一个 zip 中,哪种方法可以更好地保持系统资源可用? (以及捕捉)

下面的 zip_queue 变量是一个全局文件列表。

我目前的方法:

with zipfile.ZipFile(zip_name, "a", compression=zipfile.ZIP_DEFLATED) as myzip:
    for file in zip_queue:
        myzip.write(file) 

或者这样:

for file in zip_queue:
    with zipfile.ZipFile(zip_name, "a", compression=zipfile.ZIP_DEFLATED) as myzip:
        myzip.write(file)

我猜后者会在每次附加文件时刷新内存,但每次打开和关闭 zip 会比简单地保持文件打开产生更大的内存成本吗?

谢谢!

【问题讨论】:

内存分析器说明哪些代码消耗的内存较少以及您的数据消耗了多少? 【参考方案1】:

我会采用第一种方式,只是为了避免反复关闭和​​重新打开同一个输出文件。我怀疑每种方法究竟使用了多少内存的细节很重要,如果这些细节真的很重要,你需要用 Python 以外的东西编写代码。

作为一般规则,文件访问比内存慢,所以我根本不担心内存使用,除非你有一个可以证明的实际问题。

【讨论】:

谢谢约翰!我提出这个问题是因为我编写的脚本替换了旧的 Perl 脚本,该脚本在处理大量文件时确实容易崩溃。

以上是关于如何以内存有效的方式将大量文件添加到 zip 中?的主要内容,如果未能解决你的问题,请参考以下文章

从内存中的 url 下载图像并在内存中创建 zip 存档以发送到浏览器

以内存有效的方式将大型 csv 读入稀疏的 pandas 数据帧

使用 Java 将文件附加到 zip 文件

D:如何将文件添加到 zip 存档中?

即时将 csv 文件添加到 zip 文件以进行导出和导入

如何有效地将巨大的 sql 表加载到 asp.net 应用程序内存中以进一步迭代它?