Method to create zip archive from multiple files or directory in python
In this article, we discuss how we can create a zip archive of multiple files or directories in python. To understand this let us understand about ZipFile class.
ZipFile class
To execute this program we have to import ZipFile class of zipfile module.ZipFile is a class of zipfile modules for reading and writing zip files.
syntax: zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True)
Create a zip archives of multiples file
Method 1:Without using with statement
Let us first write the program and then see how code works.
from zipfile import ZipFile # create a ZipFile object zipObj = ZipFile('sample.zip', 'w') # Add multiple files to the zip zipObj.write('file1.txt') zipObj.write('file2.txt') # close the Zip File zipObj.close()
Output
Directory structure before the execution of the program
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10-06-2021 18:41 14 file1.txt -a---- 10-06-2021 18:41 15 file2.txt -a---- 10-06-2021 19:06 216 zip.py
Directory structure after the execution of the program
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10-06-2021 18:41 14 file1.txt -a---- 10-06-2021 18:41 15 file2.txt -a---- 10-06-2021 19:09 239 sample.zip -a---- 10-06-2021 19:09 216 zip.py
Here we clearly see that a zip file is created.
Let see how the program works. First, we create a ZipFile object bypassing the new file name and mode as ‘w’ (write mode). It will create a new zip file and open it within the ZipFile object. Then we use Call write() function on ZipFile object to add the files in it and then call close() on ZipFile object to Close the zip file.
Method 2:Using with statement
The difference between this and the previous method is that when we didn’t use with the statement then we have to close the zip file when the ZipFile object goes out of scope but when we use with statement the zip file automatically close when the ZipFile object goes out of scope. Let see the code for this.
from zipfile import ZipFile # Create a ZipFile Object with ZipFile('sample2.zip', 'w') as zipObj: # Add multiple files to the zip zipObj.write('file1.txt') zipObj.write('file2.txt')
Output
Directory structure before the execution of the program
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10-06-2021 18:41 14 file1.txt -a---- 10-06-2021 18:41 15 file2.txt -a---- 10-06-2021 19:09 239 sample.zip -a---- 10-06-2021 19:21 429 zip.py
Directory structure after the execution of the program
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10-06-2021 18:41 14 file1.txt -a---- 10-06-2021 18:41 15 file2.txt -a---- 10-06-2021 19:09 239 sample.zip -a---- 10-06-2021 19:24 239 sample2.zip -a---- 10-06-2021 19:24 429 zip.py
Here we see that another zip file is created.
Create a zip archive of the directory
To zip selected files from a directory we need to check the condition on each file path while iteration before adding it to the zip file. As here we work on directory and file so we also have to import os module. Let see the code for this.
from zipfile import ZipFile import os from os.path import basename # create a ZipFile object dirName="../zip" with ZipFile('sampleDir.zip', 'w') as zipObj: # Iterate over all the files in directory for folderName, subfolders, filenames in os.walk(dirName): for filename in filenames: #create complete filepath of file in directory filePath = os.path.join(folderName, filename) # Add file to zip zipObj.write(filePath, basename(filePath))
Output
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10-06-2021 18:41 14 file1.txt -a---- 10-06-2021 18:41 15 file2.txt -a---- 10-06-2021 19:09 239 sample.zip -a---- 10-06-2021 19:24 239 sample2.zip -a---- 10-06-2021 21:44 2796 sampleDir.zip -a---- 10-06-2021 19:24 429 zip.py -a---- 10-06-2021 21:44 506 zipdir.py
Here we see that the sampleDir.zip file is created.