StringIO的寫回磁盤我創建使用StringIO
和zipfile
在內存中的zip文件:在python
inMemoryZip = StringIO()
outfile = zipfile.ZipFile(inMemoryZip, 'w', compression=zipfile.ZIP_DEFLATED)
//outfile.write(stuff)
inMemoryZip.seek(0)
return inMemoryZip
這些數據上傳到服務器/數據庫。在某些時候,它被檢索到,我需要將它作爲一個zip文件寫入磁盤。我不知道如何做到這一點。我試過如下:
with open('pathToNewZip.zip', 'w') as archive:
archive.write(inMemoryZip.getvalue())
這將創建壓縮文件存檔,但是當我雙擊它,我看不到它的內容,它基本上創建自身的副本(另一個相同的.zip文件,但擴展.zip.cpgz)旁邊的原始
我也嘗試:
with open('pathToNewZip.zip', 'w') as archive:
shutil.copyfileobj(inMemoryZip, archive)
如上
但其相同的結果。
我想問題的一部分是我不知道如何解析這些數據。 inMemoryZip
(它是StringIO
的一個實例)可能包含多個文件。
是否每個文件寫入新行?
.getvalue()
返回什麼? StringIO
實例中所有文件的數據?
我如何確定之前壓縮的文件的名稱,以便可以使用相同的名稱重新創建它們?
有這樣的:How can I pass a Python StringIO() object to a ZipFile(), or is it not supported?但它看起來像那樣,如果只有一個文件正在寫一次。我的StringIO
實例可以有1個文件或10個文件。
注意你或許應該使用'和'wb'考慮ZIP文件是一個二進制格式open'。 – Kupiakos
@ Kupiakos指出 –
這是蟒蛇2還是3? – tdelaney