python - 在内存中创建一个 ZipFile 并将其附加到电子邮件中
问题描述
我正在尝试修改现有的 python 脚本以将内存中的 CSV 转换为(也在内存中)zip 存档并将其作为电子邮件的附件发送。我已经成功地附加了一个内存中的 CSV 文件(通过 MIMEText 对象),但由于需要设置文件字节的有效负载,所以在使用 ZIP 文件(通过 MIMEBase 对象)时遇到了问题。
这是我到目前为止的代码:
csv_buffer = cStringIO.StringIO()
buffer = cStringIO.StringIO()
zf = zipfile.ZipFile(buffer,
mode='w',
compression=zipfile.ZIP_DEFLATED,
)
zf.writestr(csvfile + ".csv", csv_buffer.getvalue())
csv_file = MIMEBase('application', 'zip')
csv_file.set_payload(zf.read())
encoders.encode_base64(csv_file)
csv_file.add_header('Content-Disposition', 'attachment',
filename=csvfile + ".zip")
msg.attach(csv_file)
从this this user's most upvoted answer我可以通过对zip文件执行正常操作来修复read() takes at least 2 arguments
我收到的错误,open()
但由于这个文件是一个不起作用的缓冲流。
我不确定如何将zipfile
对象加载到其中,set_payload
但我认为这也应该有效。
解决方案
对象的read
方法ZipFile
旨在读取 zip 文件中命名文件的内容。
在使用实例的方法buffer
写入缓冲区后,您应该使用 的内容:writestr
ZipFile
csv_file.set_payload(buffer.getvalue())
推荐阅读
- react-native - 无法加载脚本确保您正在运行 Metro 服务器
- c++ - GMock 铸造到基地失去了模拟行为
- java - 解析 Json 数据。嵌套对象给出错误
- jstree - 在 jsTree 中显示自定义图像 - 从 HTM 代码构建树
- mysql - 无法更新存储函数/触发器中的表“table2”,因为它已被调用此存储函数/触发器的语句使用
- android - 扩展嵌套项 FastAdapter
- cookies - Spartacus 与 CDS 集成,清除站点数据后未设置 profile.consent.given cookie
- python-3.x - nlp:语法依赖标签“attr”到底是什么?
- mapreduce - KDB+ 网关是否必须保存所有数据?
- java - 部署后如何解决重定向问题