如何以内存有效的方式将大量文件添加到 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 存档以发送到浏览器