Search code examples
pythonfilezipdirectoryarchive

How to zip a folder and file in python?


I've got a folder called: 'files' which contains lots of jpg photographs. I've also got a file called 'temp.kml'. I want to create a KMZ file (basically a zip file) which contains the temp.kml file AND the files directory which has the photographs sitting inside it.

Here is my code:

zfName = 'simonsZip.kmz'
foo = zipfile.ZipFile(zfName, 'w')
foo.write("temp.kml")
foo.close()
os.remove("temp.kml")

This creates the kmz file and puts the temp.kml inside. But I also want to put the folder called 'files' in as well. How do I do this?

I read here on StackOverflow that some people have used shutil to make zip files. Can anyone offer a solution?


Solution

  • The zipfile module in python has no support for adding a directory with file so you need to add the files one by one.

    This is an (untested) example of how that can be achieved by modifying your code example:

    import os
    
    zfName = 'simonsZip.kmz'
    foo = zipfile.ZipFile(zfName, 'w')
    foo.write("temp.kml")
    # Adding files from directory 'files'
    for root, dirs, files in os.walk('files'):
        for f in files:
            foo.write(os.path.join(root, f))
    foo.close()
    os.remove("temp.kml")