Python Zipfile Module
From the Python 3 documentation
This module provides tools to create, read, write, append, and list a ZIP file.
Reading ZIP files
import zipfile
# Open ZIP file and read its contents
with zipfile.ZipFile('example.zip') as example_zip:
# List all files and directories in the ZIP
print(example_zip.namelist())
# Get metadata for a specific file
spam_info = example_zip.getinfo('spam.txt')
# Print original file size
print(spam_info.file_size)
# Print compressed file size
print(spam_info.compress_size)
# Calculate compression ratio
print('Compressed file is %sx smaller!' % (round(spam_info.file_size / spam_info.compress_size, 2)))
['spam.txt', 'cats/', 'cats/catnames.txt', 'cats/zophie.jpg']
13908
3828
Compressed file is 3.63x smaller!
Extracting from ZIP Files
The extractall() method for ZipFile objects extracts all the files and folders from a ZIP file into the current working directory.
# Extract all files from ZIP to current directory
with zipfile.ZipFile('example.zip') as example_zip:
example_zip.extractall()
The extract() method for ZipFile objects will extract a single file from the ZIP file:
# Extract a single file from ZIP
with zipfile.ZipFile('example.zip') as example_zip:
# Extract to current directory (returns path)
print(example_zip.extract('spam.txt'))
# Extract to a specific directory
print(example_zip.extract('spam.txt', '/tmp/some/new/folders'))
/tmp/spam.txt
/tmp/some/new/folders/spam.txt
Creating and Adding to ZIP Files
import zipfile
# Create a new ZIP file and add a file to it
with zipfile.ZipFile('new.zip', 'w') as new_zip:
# Add file with compression
new_zip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED)
This code will create a new ZIP file named new.zip that has the compressed contents of spam.txt.
Reading metadata of ZIP files
Getting the filenames with namelist()
import zipfile
# Read ZIP file and list all filenames
with zipfile.ZipFile('example.zip', 'r') as zf:
print(zf.namelist())
['README.txt']
Getting all metadata with infolist()
import datetime
import zipfile
# Get detailed metadata for all files in ZIP
with zipfile.ZipFile('example.zip') as zf:
for info in zf.infolist():
# Determine operating system (0 = Windows, 3 = Unix)
system = 'Windows' if info.create_system == 0 else 'Unix'
# Convert date_time tuple to datetime object
modified = datetime.datetime(*info.date_time)
print(info.filename)
print(f'Comment : {info.comment}')
print(f'Modified : {modified}')
print(f'System : {system}')
print(f'ZIP version : {info.create_version}')
print(f'Compressed : {info.compress_size} bytes')
print(f'Uncompressed: {info.file_size} bytes')
README.txt
Comment : b''
Modified : 2022-11-15 06:48:02
System : Unix
ZIP version : 30
Compressed : 65 bytes
Uncompressed: 76 bytes