我正在尝试修改现有的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)
从这个用户最不赞成的答案中,我可以read() takes at least 2 arguments
通过open()
对zip文件执行常规操作来修复我收到的错误,但是由于该文件是无法使用的缓冲流。
我不确定如何将zipfile
对象加载到中,set_payload
但是我认为应该也可以。
对象的read
方法ZipFile
用于读取zip文件中命名文件的内容。
使用实例buffer
的writestr
方法写入缓冲区后,应使用的内容ZipFile
:
csv_file.set_payload(buffer.getvalue())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句