2012-10-22 95 views
-1

我在我的目录中有一个由CSV文件组成的文件夹。我正在使用Python并通过代码动态生成一些带有数据的CSV文件。所以每次代码运行时,CSV文件都会在名为csv(例如)的文件夹中创建。如何将文件夹压缩为zip?

我已计划此代码通过cron作业每10天运行一次。因此,每10天运行一次Python代码,并在csv文件夹中创建CSV文件。

现在我想用zip压缩csv文件夹,并且希望以附件形式发送包含此ZIP文件的电子邮件。

  1. 是否可以压缩CSV文件的文件夹到ZIP格式?
  2. 压缩后,是否可以将此压缩ZIP作为电子邮件附件发送?

如果是这样,任何人都可以请让我知道如何做到这一点是否有可能通过Python做到上述的东西?或者我们可以通过linux命令来做到这一点?

+0

http://docs.python.org/library/zipfile.html –

回答

0

简单的方法是运行一个单独的cron作业做了压缩和发送电子邮件:

zip -r - csv | uuencode | mail -s "csv zips for $(date)" [email protected]

如果你运行上面的cron作业,确保您cd到父目录第一。所以,如果csv/home/foo/csv

cd /home/foo && zip -r csv | uuencode | mail -s "csv zips for $(date)" [email protected]

0
import zipfile 
import smtplib 

def archive_log(src, dst): 
    """ 
    Archiving log file to zip 
    """ 
    zip = zipfile.ZipFile(dst, 'w') 
    zip.write(src, os.path.basename(src), zipfile.ZIP_DEFLATED) 
    zip.close() 

def send_email_report2(self): 
    SEND_TO = ['[email protected]'] 
    SMTP_IP = '0.0.0.0' 

    msg = MIMEMultipart() 
    msg['From'] = '[email protected]' 
    msg['To'] = COMMASPACE.join(SEND_TO) 
    msg['Date'] = formatdate(localtime=True) 
    msg['Subject'] = 'Subject' 

    msg.attach(MIMEText('bodu text')) 

    for file_link in link_attachments: 
     part = MIMEBase('application', "octet-stream") 
     part.set_payload(open(file_link, "rb").read()) 
     Encoders.encode_base64(part) 
     part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file_link)) 
     msg.attach(part) 

    smtp = smtplib.SMTP(SMTP_IP) 
    smtp.sendmail('[email protected]', SEND_TO, msg.as_string()) 
    smtp.close() 
+0

,但在上面的代码,其中archive_log功能和send_email_report2函数将被调用? –

+0

'archive_log('1.csv','1.zip') link_attachments = ['1.zip','2.zip'] send_email_report2()' – SWAPYAutomation