Python解压ZIP文件的三种实用技巧

Written by

in

文章目录
  • 这是最简单、最快的方法。Python 标准库自带 zipfile 模块,可以直接在终端调用,无需编写任何 .py 文件。非常适合在 Docker 容器 或 临时环境 中使用。 语法: python -m zipfile -e <压缩包名> <解压目标目录> 示例: 将 model_weights.zip 解压到当前目录(.): python -m zipfile -e model_weights.zip . 原理:-m 参数将库模块当作脚本运行,-e 代表 extract(解压)。
  • 如果你需要在 Python 代码中集成解压功能,zipfile 是最标准的选择。建议使用 with 语句(上下文管理器),这样可以确保文件在使用后自动关闭,即使发生错误也不会占用文件句柄。 import zipfile import os def unzip_file(zip_src, dst_dir): # 如果目标目录不存在,则创建 if not os.path.exists(dst_dir): os.makedirs(dst_dir) print(f”开始解压: {zip_src} …”) try: with zipfile.ZipFile(zip_src, ‘r’) as zfile: # extractall 会解压所有文件 zfile.extractall(path=dst_dir) print(f”✅ 解压完成,文件已保存至: {dst_dir}”) except zipfile.BadZipFile: print(“❌ 错误: 文件已损坏或不是有效的 ZIP 文件”) except Exception as e: print(f”❌ 发生未知错误: {e}”) # 调用示例 if __name__ == “__main__”: unzip_file(“merged_qwen3vl_model.zip”, “./model_output”)
  • 作为 AI 开发者,我们解压的模型往往高达几 GB 甚至几十 GB。如果没有进度条,对着黑屏傻等是非常焦虑的。此外,Windows 下打包的中文文件名在 Linux 下解压常会出现乱码。 下面的脚本解决了这两个痛点:
  • 场景 推荐方法 核心命令/库 临时操作/Docker环境 方法一 python -m zipfile -e file.zip . 通用脚本开发 方法二 import zipfile 大文件/体验优化 方法三 zipfile + tqdm 到此这篇关于Python解压ZIP文件的三种实用技巧的文章就介绍到这了,更多相关Python解压ZIP文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python自动化解压多种格式的压缩文件(支持.zip/.rar/.7z格式) Python实现解压当天创建的ZIP文件到指定文件夹中 Python Zipfile模块进行ZIP文件的创建解压信息获取和加密等操作 解决Python复杂zip文件的解压问题 Python解压 rar、zip、tar文件的方法 python批量解压zip文件的方法
  • 目录
    • 方法一:命令行“一行流” (最快、无需写脚本)
    • 方法二:标准库zipfile(基础脚本)
    • 方法三:进阶操作 (大文件进度条 + 中文乱码修复)
      • 1. 依赖安装
      • 2. 完整代码
    • 总结

      在日常开发,尤其是 AI 模型部署(如 YOLO、LLM 权重部署)中,我们经常需要在 Linux 服务器或 Docker 容器中处理压缩包。有时候容器里甚至没有安装 unzip 命令,这时候 Python 就成了我们的救命稻草。

      本文总结了使用 Python 解压 ZIP 文件的三种常用方法,涵盖了从最简单的命令行操作到处理中文乱码的进阶技巧。

      这是最简单、最快的方法。Python 标准库自带 zipfile 模块,可以直接在终端调用,无需编写任何 .py 文件。非常适合在 Docker 容器临时环境 中使用。

      语法:

      python -m zipfile -e <压缩包名> <解压目标目录>

      示例:

      model_weights.zip 解压到当前目录(.):

      python -m zipfile -e model_weights.zip .

      原理-m 参数将库模块当作脚本运行,-e 代表 extract(解压)。

      如果你需要在 Python 代码中集成解压功能,zipfile 是最标准的选择。建议使用 with 语句(上下文管理器),这样可以确保文件在使用后自动关闭,即使发生错误也不会占用文件句柄。

      import zipfile
      import os
      
      def unzip_file(zip_src, dst_dir):
          # 如果目标目录不存在,则创建
          if not os.path.exists(dst_dir):
              os.makedirs(dst_dir)
          
          print(f"开始解压: {zip_src} ...")
          
          try:
              with zipfile.ZipFile(zip_src, 'r') as zfile:
                  # extractall 会解压所有文件
                  zfile.extractall(path=dst_dir)
              print(f"✅ 解压完成,文件已保存至: {dst_dir}")
              
          except zipfile.BadZipFile:
              print("❌ 错误: 文件已损坏或不是有效的 ZIP 文件")
          except Exception as e:
              print(f"❌ 发生未知错误: {e}")
      
      # 调用示例
      if __name__ == "__main__":
          unzip_file("merged_qwen3vl_model.zip", "./model_output")
      
      

      作为 AI 开发者,我们解压的模型往往高达几 GB 甚至几十 GB。如果没有进度条,对着黑屏傻等是非常焦虑的。此外,Windows 下打包的中文文件名在 Linux 下解压常会出现乱码。

      下面的脚本解决了这两个痛点:

      我们需要 tqdm 来显示进度条(做 AI 的同学应该都有这个库):

      pip install tqdm

      import zipfile
      import os
      from tqdm import tqdm
      
      def unzip_with_progress(zip_src, dst_dir):
          if not os.path.exists(dst_dir):
              os.makedirs(dst_dir)
      
          with zipfile.ZipFile(zip_src, 'r') as zfile:
              # 获取所有文件列表
              members = zfile.infolist()
              
              # 初始化进度条,total 是文件总大小
              total_size = sum(file.file_size for file in members)
              
              print(f"正在解压 {zip_src} 到 {dst_dir} ...")
              
              with tqdm(total=total_size, unit='B', unit_scale=True, unit_divisor=1024) as pbar:
                  for member in members:
                      # --- 中文乱码修复核心代码 (可选) ---
                      # Windows 压缩包通常用 CP437 编码文件名,Linux 需要转回 GBK 或 UTF-8
                      try:
                          member.filename = member.filename.encode('cp437').decode('gbk')
                      except:
                          # 如果转换失败,保持原样(说明可能是 UTF-8)
                          pass
                      # --------------------------------
                      
                      # 解压单个文件
                      zfile.extract(member, dst_dir)
                      
                      # 更新进度条
                      pbar.update(member.file_size)
      
      if __name__ == "__main__":
          # 示例:解压一个大模型权重
          unzip_with_progress("large_model_weights.zip", "./models")
      
      

      场景 推荐方法 核心命令/库
      临时操作/Docker环境 方法一 python -m zipfile -e file.zip .
      通用脚本开发 方法二 import zipfile
      大文件/体验优化 方法三 zipfile + tqdm

      到此这篇关于Python解压ZIP文件的三种实用技巧的文章就介绍到这了,更多相关Python解压ZIP文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Python自动化解压多种格式的压缩文件(支持.zip/.rar/.7z格式)
      • Python实现解压当天创建的ZIP文件到指定文件夹中
      • Python Zipfile模块进行ZIP文件的创建解压信息获取和加密等操作
      • 解决Python复杂zip文件的解压问题
      • Python解压 rar、zip、tar文件的方法
      • python批量解压zip文件的方法

      站内搜索