python - 如何在 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 文件时得到的模拟请求。
解决方案
数据存储到 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 关闭时写入的最终记录。
推荐阅读
- amazon-ec2 - 带有用户数据的 ECS ec2 实例
- dart - SASS 不与 Dart DDC 一起编译
- python - 使用 Python 递归地创建文件夹名称与文件名匹配的文件夹
- python - .py 文件变量的动态更新
- javascript - 由于“状态更新”,React 已安装组件 setInterval 未清除间隔
- android - 如何计算flutter上的文件数?
- c# - 如何从我的 SQL Azure 应用服务 Web 应用写入日志文件?
- python - 具有给定长度的值范围的列表
- wso2 - WSO2 上的多个服务提供商。使用 oauth2 的 SSO
- mysql - 我将如何纠正这个 SQL/MYSQL FULL 外连接问题?