2017-03-28 50 views
0

我目前正在使用Python 2.7的ZipFile。我一直在遇到內存問題,將多個文件壓縮發送給用戶。當壓縮文件時,Python 2.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中,但我不確定是這種情況。

+1

看起來模塊一次只能讀取8 * 1024個字符到內存中https://hg.python.org/cpython/file/2.7/Lib/zipfile.py#l1179 – Sush

+0

'ZipFile.write()'doesn不會消耗太多的記憶。如前所述,它使用適度的塊大小,並在使用時釋放它們。程序本身是否越來越大,或者你的意思是由於內存問題而導致其他問題?操作系統緩存寫入,所以在操作系統開始提交數據之前它會很快。然後事情可能會有點緩慢。 – tdelaney

+0

有趣的是,這可能是一條紅鯡魚 –

回答

0

This question/answer(均由同一用戶)暗示它全部在內存中完成。他們提供了一個鏈接到修改後的庫EnhancedZipFile,聽起來像它的工作,但它似乎沒有太多的項目活動。

如果您不特別依賴zip,那麼this answer意味着bzip庫可以處理大文件。

+0

該作者正在使用'writestr',因爲他想修改寫入文件的名稱。該方法要求將整個文件讀入內存,但這裏使用的方法不會。從python 3.6開始,'ZipFile.open'支持寫模式......所以這個問題終於修復了! – tdelaney

0

Python將保存所有在內存中迭代的文件,除了調用一個可執行文件,它將在操作系統上爲您執行這個任務之外,我無法想象繞過該文件。

+0

查閱'ZipFile.write'的文檔。這些只是文件名,而不是文件內容。 OP正在迭代現有的列表......在那裏沒有明顯的影響。 – tdelaney

相關問題