2017-01-10 62 views
2

我有一个文件列表,其中包含需要为电子邮件附件一起压缩的所有文件。压缩文件列表并附加到电子邮件 - python

目前我使用的代码是

if zip_file == True: 
    for file in file_list: 
     zf = tempfile.TemporaryFile(prefix='mail', suffix='.zip') 
     zip = zipfile.ZipFile(zf, 'a') 
     zip.write(file) 
     zip.close() 
     zf.seek(0) 
     part = MIMEBase('application', 'zip') 
     part.set_payload(zf.read()) 
     encoders.encode_base64(part) 
     part.add_header('Content-Disposition', 'attachment', filename='xls_attachments' + '.zip') 
     msg.attach(part) 

这让我创建一个zip文件中的所有文件,并重视他们的邮件。因此,如果我在file_list中有10个文件,那么邮件将有10个压缩附件。但我想要的是将所有10个文件合并到一个zip文件中。

我在这里看到的例子说使用多个zip.write()方法来写每个文件。但这不会很好,因为我无法控制file_list中的条目数。

+0

看看这个答案:http://stackoverflow.com/questions/25544475/using-python-to-附加的A-list-的 - 文件 - 到 - A-zip文件 – Humbalan

回答

1

您可以使用像这样的文件夹中的所有文件压缩成一个zip:

import os 
import zipfile 

working_folder = 'C:\\path_to_some_folder\\' 
files = os.listdir(working_folder) 
files_py = files 

ZipFile = zipfile.ZipFile("zip testing3.zip", "a") 

for a in files_py: 
    ZipFile.write(os.path.basename(a), compress_type=zipfile.ZIP_DEFLATED) 
ZipFile.close() 
相关问题