How to create a zip archive of a directory?

How can I create a zip archive of a directory structure in Python?


  • As others have pointed out, you should use zipfile. The documentation tells you what functions are available, but doesn't really explain how you can use them to zip an entire directory. I think it's easiest to explain with some example code:

    import os
    import zipfile
    def zipdir(path, ziph):
        # ziph is zipfile handle
        for root, dirs, files in os.walk(path):
            for file in files:
                ziph.write(os.path.join(root, file), 
                           os.path.relpath(os.path.join(root, file), 
                                           os.path.join(path, '..')))
    with zipfile.ZipFile('', 'w', zipfile.ZIP_DEFLATED) as zipf:
        zipdir('tmp/', zipf)