Python でディレクトリ以下のファイルのzip圧縮

zipfileモジュールを使う。

#!/usr/bin/python
# -*- coding:sjis -*-

import os
import zipfile

# 現在時間をフォーマットして文字列で返す
def getDateStr(format='%Y%m%d_%H%M%S'):
    import datetime
    t = datetime.datetime.now()
    return t.strftime(format)

## dir_name ディレクトリ名
## arc_dir 圧縮するディレクトリ名
## zip_name 圧縮で生成されるファイル名
## dir_name=/aa/bb/ arc_dir=ccの場合は、/aa/bb/のccディレクトリを圧縮する
def zipDirectoryDir(dir_name, arc_dir, zip_name=None):
    if zip_name == None:
        tstr = getDateStr('_%Y%m%d_%H%M%S') 
        zip_name = arc_dir + tstr + '.zip'

    print "zipDirectoryDir: ", dir_name, arc_dir, zip_name
    zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)

    olddir = os.getcwd()
    os.chdir(dir_name)
    zip_gen = os.walk(arc_dir)
    for zip_me in zip_gen: # [rootname, dirnamelist, filenamelist ]
        for reg_file in zip_me[2]: # loop for finename
            write_file = os.path.join(zip_me[0], reg_file)
            arc_name   = write_file
            # print "zip write: ", write_file, arc_name
            try:
                zipf.write(write_file, arc_name);
            except:
                print "ERROR: writing file =", write_file
    zipf.close()

    os.chdir(olddir)

if __name__ == "__main__":
    zipDirectoryDir('/mydata/data/', 'data1')