Python 在内存中创建ZipFile并将其附加到电子邮件
我正试图修改现有的python脚本,将内存中的CSV转换为(也在内存中)zip存档,并将其作为附件发送到电子邮件。我已经成功地附加了一个内存中的CSV文件(通过MIMEText对象),但是由于需要设置文件字节的有效负载,我在使用ZIP文件(通过MIMEBase对象)时遇到了问题 这是我目前掌握的代码:Python 在内存中创建ZipFile并将其附加到电子邮件,python,python-2.7,email-attachments,zipfile,in-memory,Python,Python 2.7,Email Attachments,Zipfile,In Memory,我正试图修改现有的python脚本,将内存中的CSV转换为(也在内存中)zip存档,并将其作为附件发送到电子邮件。我已经成功地附加了一个内存中的CSV文件(通过MIMEText对象),但是由于需要设置文件字节的有效负载,我在使用ZIP文件(通过MIMEBase对象)时遇到了问题 这是我目前掌握的代码: csv_buffer = cStringIO.StringIO() buffer = cStringIO.StringIO() zf = zipfile.ZipFile(buffer,
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)
通过对zip文件执行正常的open()
操作,我可以修复read()接受至少2个参数的错误,但由于该文件是一个缓冲流,因此无法工作
我不确定如何将zipfile
对象加载到set\u有效载荷中,但我认为这也应该起作用。zipfile
对象的读取方法意味着读取zip文件中命名文件的内容
使用ZipFile
实例的writestr
方法写入缓冲区后,应使用buffer
的内容:
csv_file.set_payload(buffer.getvalue())
太棒了,谢谢!我知道有一个简单的答案,这当然是!