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

 更新时间:2026年01月22日 08:32:10   作者:lxmyzzs  
在日常开发,我们经常需要在 Linux 服务器或 Docker 容器中处理压缩包,本文总结了使用 Python 解压 ZIP 文件的三种常用方法,涵盖了从最简单的命令行操作到处理中文乱码的进阶技巧,大家可以根据需要进行选择

在日常开发,尤其是 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(解压)。

方法二:标准库zipfile(基础脚本)

如果你需要在 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 下解压常会出现乱码。

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

1. 依赖安装

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

pip install tqdm

2. 完整代码

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 将大文件切分为多个小文件的实例

    python 将大文件切分为多个小文件的实例

    今天小编就为大家分享一篇python 将大文件切分为多个小文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python第三方Window模块文件的几种安装方法

    Python第三方Window模块文件的几种安装方法

    这篇文章主要介绍了Python第三方Window模块文件安装方法,需要的朋友可以参考下
    2018-11-11
  • Python read函数按字节(字符)读取文件的实现

    Python read函数按字节(字符)读取文件的实现

    这篇文章主要介绍了Python read函数按字节(字符)读取文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 教你怎么用python爬取爱奇艺热门电影

    教你怎么用python爬取爱奇艺热门电影

    突然心血来潮想看看电影,特地整理了这篇文章,文中有非常详细的代码示例,对正在学习python爬虫的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • pip install过程中出现error: subprocess-exited-with-error错误的解决办法

    pip install过程中出现error: subprocess-exited-with-erro

    在Python环境配置过程中,经常会遇到各种安装错误,其中一个常见的错误是 pip install 过程中出现的 error: subprocess-exited-with-error,在本文中,我将详细解析这个错误的原因,并提供具体的解决方案和步骤,确保大家能够顺利完成安装,避免类似问题的再次发生
    2024-07-07
  • Python安装使用命令行交互模块pexpect的基础教程

    Python安装使用命令行交互模块pexpect的基础教程

    Pexpect是一个纯Python模块,可以用来和ssh、ftp、passwd、telnet等命令行命令进行交互使用,在Linux系统下尤其好用,下面我们就来具体来看一下Python安装使用命令行交互模块pexpect的基础教程:
    2016-05-05
  • Python读取YAML文件过程详解

    Python读取YAML文件过程详解

    这篇文章主要介绍了Python读取YAML文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python获取Linux系统下的本机IP地址代码分享

    Python获取Linux系统下的本机IP地址代码分享

    这篇文章主要介绍了Python获取Linux系统下的本机IP地址代码分享,本文直接给出实现代码,可以获取到eth0等网卡的IP地址,需要的朋友可以参考下
    2014-11-11
  • 浅谈一下python中threading模块

    浅谈一下python中threading模块

    这篇文章主要介绍了一下python中threading模块,threading提供了一个比thread模块更高层的API来提供线程的并发性。这些线程并发运行并共享内存,需要的朋友可以参考下
    2023-04-04
  • Python 的 f-string 可以连接字符串与数字的原因解析

    Python 的 f-string 可以连接字符串与数字的原因解析

    这篇文章主要介绍了Python 的 f-string 可以连接字符串与数字的原因解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论