How to create a zip archive of a directory


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

9/8/2014 2:33:22 PM

Accepted Answer

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:

#!/usr/bin/env python
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))

if __name__ == '__main__':
    zipf = zipfile.ZipFile('', 'w', zipfile.ZIP_DEFLATED)
    zipdir('tmp/', zipf)

Adapted from:

2/24/2016 2:26:37 PM

The easiest way is to use shutil.make_archive. It supports both zip and tar formats.

import shutil
shutil.make_archive(output_filename, 'zip', dir_name)

If you need to do something more complicated than zipping the whole directory (such as skipping certain files), then you'll need to dig into the zipfile module as others have suggested.

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow