首页 > 解决方案 > 如何在 python 中将 ZipFile 对象转换为二进制文件?

问题描述

假设我像这样创建 zipfile 对象:

with ZipFile(StringIO(), mode='w', compression=ZIP_DEFLATED) as zf:
            zf.writestr('data.json', 'data_json')
            zf.writestr('document.docx', "Some document")
            
            zf.to_bytes() # there is no such method

我可以转换zf成字节吗?

注意:我是说自己获取一个字节的 zipfile,而不是内部 zip 存档的内容文件?

我也更喜欢在内存中进行而不转储到磁盘。

需要它来测试我requests.get在下载 zip 文件时得到的模拟请求。

标签: python

解决方案


数据存储到 StringIO 对象,您没有保存对它的引用。您应该已保存参考。(此外,除非您使用的是 Python 2,否则您需要 BytesIO,而不是 StringIO。)

memfile = io.BytesIO()
with ZipFile(memfile, mode='w', compression=ZIP_DEFLATED) as zf:
    ...
data = memfile.getvalue()

请注意,在块getvalue with调用(或在 之后close,如果您想手动关闭 ZipFile 对象)很重要。否则,您的输出将损坏,丢失 ZipFile 关闭时写入的最终记录。


推荐阅读