Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7'的行为;s压缩文件时的ZipFile_Python_Python 2.7_Zip - Fatal编程技术网

Python 2.7'的行为;s压缩文件时的ZipFile

Python 2.7'的行为;s压缩文件时的ZipFile,python,python-2.7,zip,Python,Python 2.7,Zip,我目前正在使用Python2.7的ZipFile。我在压缩多个文件以发送给用户时遇到内存问题 当我有代码时: fp = open('myzip.zip', 'w') archive = zipfile.ZipFile(fp, 'w', zipfile.ZIP_DEFLATED) for filepath in filepaths: archive.write(filepath) archive.close() Python会在某个时候将所有这些文件加载到内存中吗?我本以为Python会将

我目前正在使用Python2.7的ZipFile。我在压缩多个文件以发送给用户时遇到内存问题

当我有代码时:

fp = open('myzip.zip', 'w')
archive = zipfile.ZipFile(fp, 'w', zipfile.ZIP_DEFLATED)
for filepath in filepaths:
   archive.write(filepath)
archive.close()
Python会在某个时候将所有这些文件加载到内存中吗?我本以为Python会将文件的内容流式传输到zip中,但我不确定情况是否如此。

(两个都由同一个用户)表明这一切都是在内存中完成的。它们提供了一个链接,指向一个修改过的库,听起来像是按照您的意愿工作,但是它似乎在项目上没有太多活动


如果您不特别依赖zip,则意味着bzip库可以处理大文件。

Python将在内存中保存您迭代的所有文件,除了调用一个在操作系统上为您完成任务的可执行文件之外,我想不出什么办法可以绕过它。

看起来模块一次向内存中读取8*1024个字符。
ZipFile.write()
不会消耗太多内存。如前所述,它使用适度的块大小,这些块大小在使用时被释放。程序本身是否越来越大,或者内存问题是指其他问题?操作系统缓存写操作,因此在操作系统开始提交数据之前,它的速度会很快。然后事情可能会有点陷入困境。有趣的是,好吧,这可能是一个转移注意力的问题查看
ZipFile.write的文档。这些只是文件名,而不是文件内容。OP正在迭代现有列表。。。没有明显的影响。作者使用了
writestr
,因为他想修改所写文件的名称。该方法需要将整个文件读入内存,但此处使用的方法不需要。从Python3.6开始,
ZipFile.open
支持写模式。。。所以这个问题终于解决了!