如何将文件夹压缩到zip?

时间:2012-10-22 05:20:33

标签: python linux email compression zip

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

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

现在我想用csv压缩zip文件夹,并希望发送一封包含此ZIP文件的电子邮件作为附件。

  1. 是否可以压缩包含ZIP格式的CSV文件的文件夹?
  2. 压缩后,是否可以将此压缩ZIP作为电子邮件附件发送?
  3. 如果是这样,任何人都可以让我知道如何做到这有可能通过Python做上述事情吗?或者我们可以通过linux命令来做到这一点?

2 个答案:

答案 0 :(得分:0)

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

zip -r - csv | uuencode | mail -s "csv zips for $(date)" foo@bar.com

如果您将上述内容作为cron作业运行,请确保先{parent} cd进入父目录。如果csv/home/foo/csv

cd /home/foo && zip -r csv | uuencode | mail -s "csv zips for $(date)" foo@bar.com

答案 1 :(得分: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 = ['xxx@yyy.com']
    SMTP_IP = '0.0.0.0'

    msg = MIMEMultipart()
    msg['From'] = 'xxx@yyy'
    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('xxx1@yyy.com', SEND_TO, msg.as_string())
    smtp.close()