Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/python/cpython/llms.txt

Use this file to discover all available pages before exploring further.

The 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