如何在内存中创建包含多个文件和子文件夹的 zip 存档?
How to create a zip archive containing multiple files and subfolders in memory?
以下运行,但导致解压缩失败的文件:
import io
import zipfile
b = io.BytesIO()
zf = zipfile.ZipFile(b, mode='w')
zf.writestr('a/b.txt', 'look here')
zf.writestr('a/c.txt', 'look there')
open('here.zip', 'wb').write(b.getbuffer())
然后测试:
$ unzip here.zip
Archive: here.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of here.zip or
here.zip.zip, and cannot find here.zip.ZIP, period.
缺少什么?
更新:
这现在似乎可以工作了,不确定它是否被最大程度地压缩了?
import io
import zipfile
b = io.BytesIO()
zf = zipfile.ZipFile(b, mode='w')
zf.writestr('a/b.txt', 'look here')
zf.writestr('a/c.txt', 'look there')
zf.close()
open('here.zip', 'wb').write(b.getbuffer())
在您的代码中,您需要在写入数据后关闭 zip 文件。下面是示例代码。
import io
import zipfile
b = io.BytesIO()
zf = zipfile.ZipFile(b, mode='w')
zf.writestr('a/b.txt', 'look here')
zf.writestr('a/c.txt', 'look there')
zf.close()
open('here.zip', 'wb').write(b.getbuffer())
以下运行,但导致解压缩失败的文件:
import io
import zipfile
b = io.BytesIO()
zf = zipfile.ZipFile(b, mode='w')
zf.writestr('a/b.txt', 'look here')
zf.writestr('a/c.txt', 'look there')
open('here.zip', 'wb').write(b.getbuffer())
然后测试:
$ unzip here.zip
Archive: here.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of here.zip or
here.zip.zip, and cannot find here.zip.ZIP, period.
缺少什么?
更新:
这现在似乎可以工作了,不确定它是否被最大程度地压缩了?
import io
import zipfile
b = io.BytesIO()
zf = zipfile.ZipFile(b, mode='w')
zf.writestr('a/b.txt', 'look here')
zf.writestr('a/c.txt', 'look there')
zf.close()
open('here.zip', 'wb').write(b.getbuffer())
在您的代码中,您需要在写入数据后关闭 zip 文件。下面是示例代码。
import io
import zipfile
b = io.BytesIO()
zf = zipfile.ZipFile(b, mode='w')
zf.writestr('a/b.txt', 'look here')
zf.writestr('a/c.txt', 'look there')
zf.close()
open('here.zip', 'wb').write(b.getbuffer())