【Python】zipfile模块:创建、读取、写入、解压和操作.zip压缩文件

Python 中的 zipfile 模块提供了用于创建、读取、写入、解压和操作 .zip 压缩文件的功能。通过这个模块,您可以轻松地进行文件压缩和解压缩,处理 .zip 文件格式。

1. zipfile 模块常用类和函数

1.1 zipfile.ZipFile

ZipFile 类是 zipfile 模块的核心类,提供了对 .zip 文件的操作方法。你可以使用这个类来创建、读取和修改 .zip 文件。

构造函数:

zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)
  • file:指定要打开的 .zip 文件的路径,或者一个类文件对象。
  • mode:文件打开模式,常见的模式有:
    • 'r':读取模式(默认)。
    • 'w':写入模式(如果 .zip 文件已存在,会覆盖)。
    • 'a':追加模式。
  • compression:指定压缩方法,常用的有 ZIP_STORED(无压缩)和 ZIP_DEFLATED(压缩)。默认是 ZIP_DEFLATED
  • allowZip64:是否允许 .zip 文件超过 2GB。默认 True

2. 压缩文件

2.1 创建新的 .zip 文件

可以使用 ZipFile 类创建一个新的 .zip 文件并添加文件。

import zipfile

# 创建一个新的 ZIP 文件
with zipfile.ZipFile("example.zip", "w") as zipf:
    zipf.write("file1.txt")  # 将文件添加到压缩文件中
    zipf.write("file2.txt")
2.2 向现有 .zip 文件追加内容

如果文件已经存在,并且你想要向其中添加新的文件,可以使用 'a' 模式。

import zipfile

# 向已存在的 ZIP 文件添加文件
with zipfile.ZipFile("example.zip", "a") as zipf:
    zipf.write("file3.txt")
2.3 压缩多个文件

你也可以使用 writestr() 方法将内容直接写入 .zip 文件,而无需先保存为实际的文件。

import zipfile

with zipfile.ZipFile("example.zip", "w") as zipf:
    zipf.writestr("file1.txt", "Hello, World!")  # 将内容写入文件
    zipf.writestr("file2.txt", "Python ZipFile Example")

3. 解压文件

3.1 解压 .zip 文件中的所有文件

使用 ZipFile 对象的 extractall() 方法可以将 .zip 文件中的所有文件提取到指定目录。

import zipfile

# 解压所有文件到当前目录
with zipfile.ZipFile("example.zip", "r") as zipf:
    zipf.extractall()  # 提取到当前工作目录

# 如果想解压到指定的目录
with zipfile.ZipFile("example.zip", "r") as zipf:
    zipf.extractall("output_directory")
3.2 解压单个文件

如果只想提取 .zip 文件中的某一个文件,可以使用 extract() 方法。

import zipfile

# 解压特定文件
with zipfile.ZipFile("example.zip", "r") as zipf:
    zipf.extract("file1.txt", "output_directory")

4. 查看 .zip 文件内容

4.1 列出 .zip 文件中的所有文件

使用 ZipFile 对象的 namelist() 方法可以获取 .zip 文件中包含的所有文件名。

import zipfile

with zipfile.ZipFile("example.zip", "r") as zipf:
    print(zipf.namelist())  # 输出 ZIP 文件中所有文件的文件名列表
4.2 获取文件信息

你可以使用 ZipFile 对象的 getinfo() 方法获取文件的详细信息,例如文件大小和修改日期。

import zipfile

with zipfile.ZipFile("example.zip", "r") as zipf:
    info = zipf.getinfo("file1.txt")
    print(info)  # 输出该文件的详细信息

5. 读取 .zip 文件中的内容

5.1 读取文件内容

你可以通过 ZipFile 对象的 open() 方法打开 .zip 文件中的某个文件,并读取其内容。

import zipfile

with zipfile.ZipFile("example.zip", "r") as zipf:
    with zipf.open("file1.txt") as f:
        content = f.read()
        print(content.decode())  # 输出文件内容(假设是文本文件)

6. 其他常用方法

6.1 ZipFile.testzip()

检查 .zip 文件中的文件是否有损坏。若没有损坏,返回 None,如果有损坏,返回第一个损坏文件的名字。

import zipfile

with zipfile.ZipFile("example.zip", "r") as zipf:
    result = zipf.testzip()
    if result is None:
        print("ZIP file is OK")
    else:
        print(f"Corrupted file: {result}")
6.2 ZipFile.close()

关闭 .zip 文件。虽然可以通过 with 语句自动管理文件的打开和关闭,但如果没有使用 with,则需要手动调用 close()

import zipfile

zipf = zipfile.ZipFile("example.zip", "w")
zipf.close()  # 手动关闭文件

7. zipfile 模块中常见的压缩方法

  • ZIP_STORED:无压缩(存储)。
  • ZIP_DEFLATED:使用 DEFLATE 算法进行压缩(常见的压缩方法)。
  • ZIP_BZIP2:使用 bzip2 压缩(较少使用)。
  • ZIP_LZMA:使用 LZMA 压缩(较少使用)。

示例:使用 ZIP_DEFLATED 压缩

import zipfile

with zipfile.ZipFile("example.zip", "w", compression=zipfile.ZIP_DEFLATED) as zipf:
    zipf.write("file1.txt")
    zipf.write("file2.txt")

总结

zipfile 模块为处理 .zip 压缩文件提供了非常便捷的方法。你可以用它来压缩文件、解压文件、读取文件内容、查看 .zip 文件中的文件列表等。它的功能非常全面,能够满足大多数日常的文件压缩和解压需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值