【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 文件中的文件列表等。它的功能非常全面,能够满足大多数日常的文件压缩和解压需求。

    作者:彬彬侠

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】zipfile模块全方位指南:创建、读取、写入、解压与操作ZIP压缩文件

    发表回复