Python轮子:zipfile~压缩、解压缩文件神器

原文链接:http://www.juzicode.com/python-module-zipfile

Python的zipfile模块是标准库中用于处理ZIP压缩文件的工具,提供了创建、读取、写入和提取ZIP文件的功能,支持密码保护、多种压缩算法和跨平台操作。

应用场景

  • 批量文件压缩与解压缩
  • 自动化备份与归档
  • Web应用中的文件打包下载
  • 数据分析前的压缩文件处理
  • 软件安装包的制作
  • 加密存储敏感文件

模块导入

import zipfile
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED

基本使用方法

1)创建ZIP文件

# juzicode.com/VX公众号:juzicode
import zipfile

# 创建新ZIP文件并添加文件
with zipfile.ZipFile('example.zip', 'w', compression=zipfile.ZIP_DEFLATED) as zipf:
    zipf.write('file1.txt')  # 添加单个文件
    zipf.write('file2.log')  # 添加另一个文件
    
print("ZIP文件创建成功")

运行结果:在当前目录生成包含file1.txt和file2.log的example.zip文件

2)读取ZIP文件内容

# juzicode.com/VX公众号:juzicode
import zipfile

# 读取ZIP文件内容
with zipfile.ZipFile('example.zip', 'r') as zipf:
    # 打印ZIP文件中的所有文件列表
    print("ZIP文件内容:")
    for file_info in zipf.infolist():
        print(f"文件名: {file_info.filename}, 大小: {file_info.file_size}字节")
    
    # 读取特定文件内容
    with zipf.open('file1.txt') as f:
        content = f.read().decode('utf-8')
        print("\nfile1.txt内容:\n", content)

运行结果:输出ZIP文件内容列表和指定文件内容

3)解压ZIP文件

# juzicode.com/VX公众号:juzicode
import zipfile
import os

# 创建解压目录
os.makedirs('extracted_files', exist_ok=True)

# 解压整个ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
    zipf.extractall('extracted_files')
    
print("文件解压成功,请查看extracted_files目录")

运行结果:在extracted_files目录下生成解压后的文件

4)向现有ZIP添加文件

# juzicode.com/VX公众号:juzicode
import zipfile

# 以追加模式打开ZIP文件
with zipfile.ZipFile('example.zip', 'a') as zipf:
    zipf.write('additional_file.pdf')
    
print("文件添加成功")

运行结果:在example.zip中添加additional_file.pdf

5)检查ZIP文件完整性

# juzicode.com/VX公众号:juzicode
import zipfile

def check_zip_integrity(zip_path):
    """检查ZIP文件是否损坏"""
    try:
        with zipfile.ZipFile(zip_path) as zipf:
            # 测试ZIP文件是否有效
            bad_file = zipf.testzip()
            if bad_file is None:
                print("ZIP文件完整无损坏")
            else:
                print(f"损坏文件: {bad_file}")
    except zipfile.BadZipFile:
        print("ZIP文件已损坏或格式不正确")

# 使用示例
check_zip_integrity('example.zip')

运行结果:验证ZIP文件完整性

高级功能

1)自定义压缩级别

# juzicode.com/VX公众号:juzicode
import zipfile
import zlib

# 使用不同压缩级别
with zipfile.ZipFile('compressed.zip', 'w') as zipf:
    # 存储模式(不压缩)
    zipf.write('file1.txt', compress_type=zipfile.ZIP_STORED)
    
    # 默认压缩级别
    zipf.write('file2.txt', compress_type=zipfile.ZIP_DEFLATED)
    
    # 最高压缩级别
    zipf.write('file3.txt', compress_type=zipfile.ZIP_DEFLATED, compresslevel=9)

print("不同压缩级别的ZIP文件创建完成")

2)处理ZIP文件注释

# juzicode.com/VX公众号:juzicode
import zipfile

# 添加ZIP文件注释
with zipfile.ZipFile('with_comment.zip', 'w') as zipf:
    zipf.write('readme.txt')
    zipf.comment = b'This is a ZIP file comment'

# 读取ZIP文件注释
with zipfile.ZipFile('with_comment.zip', 'r') as zipf:
    print("ZIP文件注释:", zipf.comment.decode('utf-8'))

运行结果:

ZIP文件注释: This is a ZIP file comment

3)处理大型ZIP文件

# juzicode.com/VX公众号:juzicode
import zipfile
import os

def process_large_zip(zip_path, extract_to):
    """处理大型ZIP文件,避免内存问题"""
    with zipfile.ZipFile(zip_path) as zipf:
        for file in zipf.namelist():
            # 逐个提取文件
            zipf.extract(file, extract_to)
            print(f"已处理: {file}")
            
    print("大型ZIP文件处理完成")

# 使用示例
process_large_zip('large_files.zip', 'extracted_large_files')

运行结果:逐个处理大ZIP文件中的内容,避免内存溢出

总结

zipfile模块核心优势:

  • Python标准库内置,无需额外安装
  • 支持多种压缩算法和加密方式
  • 提供完整的ZIP文件操作API
  • 支持上下文管理器,安全可靠

注意事项:

  • 加密功能使用传统PKZIP加密,安全性有限
  • 处理超大文件时需考虑内存使用
  • 某些高级ZIP特性可能不受支持
  • 跨平台路径处理需注意分隔符差异

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注