Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在内存中创建ZipFile并将其附加到电子邮件_Python_Python 2.7_Email Attachments_Zipfile_In Memory - Fatal编程技术网

Python 在内存中创建ZipFile并将其附加到电子邮件

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,

我正试图修改现有的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)
通过对zip文件执行正常的
open()
操作,我可以修复
read()接受至少2个参数的错误,但由于该文件是一个缓冲流,因此无法工作


我不确定如何将
zipfile
对象加载到
set\u有效载荷中,但我认为这也应该起作用。

zipfile
对象的
读取
方法意味着读取zip文件中命名文件的内容

使用
ZipFile
实例的
writestr
方法写入缓冲区后,应使用
buffer
的内容:

csv_file.set_payload(buffer.getvalue())

太棒了,谢谢!我知道有一个简单的答案,这当然是!