Python内置模块之zipfile详细功能介绍及示例

Python中的zipfile模块详解

zipfile模块是Python标准库中用于处理ZIP文件的模块,它允许你创建、读取、写入和提取ZIP文件。下面我将详细介绍这个模块的主要方法,并结合实际例子说明如何使用。

主要方法

1. 基本操作

ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)

构造函数,用于创建一个ZipFile对象。

  • file:ZIP文件的路径或文件对象
  • mode:打开模式,'r’读取,'w’写入,'a’追加,'x’独占创建
  • compression:压缩方法,ZIP_STORED(不压缩)或ZIP_DEFLATED(压缩)
  • allowZip64:是否允许使用ZIP64扩展
close()

关闭ZIP文件。

2. 读取ZIP文件

namelist()

返回ZIP文件中所有文件和目录的列表。

infolist()

返回包含每个文件信息的ZipInfo对象列表。

getinfo(name)

返回指定文件的ZipInfo对象。

read(name, pwd=None)

读取ZIP文件中指定文件的内容。

extract(member, path=None, pwd=None)

提取单个文件到指定目录。

extractall(path=None, members=None, pwd=None)

提取所有文件到指定目录。

3. 写入ZIP文件

write(filename, arcname=None, compress_type=None)

将文件写入ZIP文件。

writestr(zinfo_or_arcname, data, compress_type=None)

使用字符串数据写入文件到ZIP文件。

4. 其他方法

setpassword(pwd)

设置默认密码。

testzip()

检查ZIP文件的完整性。

printdir()

打印ZIP文件的内容目录。

实际使用示例

示例1:创建ZIP文件

import zipfile

# 创建一个新的ZIP文件并添加文件
with zipfile.ZipFile('example.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipf.write('file1.txt', 'file1.txt')  # 添加文件并保持原名
    zipf.write('file2.txt', 'backup/file2.txt')  # 添加文件并放入子目录
    zipf.writestr('readme.txt', '这是一个示例ZIP文件')  # 直接从字符串创建文件

示例2:读取ZIP文件内容

import zipfile

# 读取ZIP文件内容
with zipfile.ZipFile('example.zip', 'r') as zipf:
    # 打印ZIP文件中的文件列表
    print("ZIP文件内容:")
    zipf.printdir()
    
    # 读取特定文件内容
    print("\n读取readme.txt内容:")
    with zipf.open('readme.txt') as f:
        print(f.read().decode('utf-8'))
    
    # 提取单个文件
    zipf.extract('file1.txt', 'extracted_files')
    
    # 提取所有文件
    zipf.extractall('extracted_all')

示例3:处理加密的ZIP文件

import zipfile

# 创建加密的ZIP文件
with zipfile.ZipFile('secure.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipf.setpassword(b'secret')  # 设置密码
    zipf.write('sensitive_data.txt')

# 读取加密的ZIP文件
try:
    with zipfile.ZipFile('secure.zip', 'r') as zipf:
        zipf.setpassword(b'secret')  # 必须提供正确密码
        zipf.extractall('secure_data')
        print("文件提取成功")
except RuntimeError as e:
    print("密码错误或文件损坏:", e)

示例4:向现有ZIP文件追加内容

import zipfile
import os

# 检查文件是否存在,如果存在则追加,否则创建
mode = 'a' if os.path.exists('example.zip') else 'w'

with zipfile.ZipFile('example.zip', mode, zipfile.ZIP_DEFLATED) as zipf:
    zipf.write('additional_file.txt')

示例5:处理大型文件(ZIP64)

import zipfile

# 处理可能超过4GB的文件
with zipfile.ZipFile('large_files.zip', 'w', zipfile.ZIP_DEFLATED, allowZip64=True) as zipf:
    zipf.write('large_video.mp4')

实际应用场景

  1. 备份文件:定期将重要文件打包成ZIP文件备份
  2. Web应用:让用户下载多个文件时打包成ZIP
  3. 日志归档:将旧的日志文件压缩归档以节省空间
  4. 数据处理:处理从网络下载的ZIP格式数据集

注意事项

  1. 使用with语句可以确保文件正确关闭
  2. 对于大型文件,记得设置allowZip64=True
  3. ZIP文件的加密不是非常安全,对于高度敏感数据应考虑其他加密方式
  4. 路径处理时要注意跨平台兼容性(Windows和Unix路径差异)

希望这些示例能帮助你理解如何使用Python的zipfile模块处理ZIP文件!

你可能感兴趣的:(Python,python,服务器,java,运维,后端)