zipfile module provides tools to create, read, write, append, and list ZIP files.
Module Import
import zipfile
Reading ZIP Files
import zipfile
# Open ZIP file
with zipfile.ZipFile('archive.zip', 'r') as zf:
# List contents
print(zf.namelist())
# Get file info
for info in zf.infolist():
print(f"{info.filename}: {info.file_size} bytes")
# Read specific file
with zf.open('file.txt') as f:
content = f.read()
# Extract all files
zf.extractall('extracted')
# Extract specific file
zf.extract('file.txt', 'output')
Creating ZIP Files
import zipfile
# Create new ZIP file
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
# Add file
zf.write('file.txt')
# Add file with different archive name
zf.write('data.txt', arcname='renamed.txt')
# Add file from string
zf.writestr('info.txt', 'File contents here')
Appending to ZIP Files
import zipfile
# Append to existing ZIP
with zipfile.ZipFile('archive.zip', 'a') as zf:
zf.write('new_file.txt')
Compression Levels
import zipfile
# No compression
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_STORED) as zf:
zf.write('file.txt')
# Deflate compression (most common)
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
zf.write('file.txt')
# BZIP2 compression
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_BZIP2) as zf:
zf.write('file.txt')
# LZMA compression
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_LZMA) as zf:
zf.write('file.txt')
Practical Examples
Backup Directory
import zipfile
from pathlib import Path
def backup_directory(directory, output_zip):
"""Backup all files in directory to ZIP"""
with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zf:
for file in Path(directory).rglob('*'):
if file.is_file():
zf.write(file, file.relative_to(directory))
backup_directory('my_project', 'backup.zip')
Extract with Progress
import zipfile
def extract_with_progress(zip_path, extract_to):
"""Extract ZIP with progress indication"""
with zipfile.ZipFile(zip_path, 'r') as zf:
files = zf.namelist()
total = len(files)
for i, file in enumerate(files, 1):
print(f"Extracting {i}/{total}: {file}")
zf.extract(file, extract_to)
extract_with_progress('archive.zip', 'output')
shutil
High-level file operations
tarfile
TAR archive handling
