メモ。ファイルなら簡単なのに、ディレクトリだと面倒。
os.walkでファイルを探してzipに追加する。
# coding: utf-8 import os import sys import zipfile def zip_directory(path): zip_targets = [] # pathからディレクトリ名を取り出す base = os.path.basename(path) # 作成するzipファイルのフルパス zipfilepath = os.path.abspath('%s.zip' % base) # walkでファイルを探す for dirpath, dirnames, filenames in os.walk(path): for filename in filenames: filepath = os.path.join(dirpath, filename) # 作成するzipファイルのパスと同じファイルは除外する if filepath == zipfilepath: continue arc_name = os.path.relpath(filepath, os.path.dirname(path)) print filepath, arc_name zip_targets.append((filepath, arc_name)) for dirname in dirnames: filepath = os.path.join(dirpath, dirname) arc_name = os.path.relpath(filepath, os.path.dirname(path)) + os.path.sep print filepath, arc_name zip_targets.append((filepath, arc_name)) # zipファイルの作成 zip = zipfile.ZipFile(zipfilepath, 'w') for filepath, name in zip_targets: zip.write(filepath, name) zip.close() def main(): zip_directory(sys.argv[1]) if __name__ == '__main__': main()
$ python main.py /home/tokibito/test_directory