当前位置: 首页 > news >正文

Python 实用技:解压 ZIP 文件的三种姿势(从一行命令到进阶脚本)

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语句(上下文管理器),这样可以确保文件在使用后自动关闭,即使发生错误也不会占用文件句柄。

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

方法三:进阶操作 (大文件进度条 + 中文乱码修复)

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

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

1. 依赖安装

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

pipinstalltqdm

2. 完整代码

importzipfileimportosfromtqdmimporttqdmdefunzip_with_progress(zip_src,dst_dir):ifnotos.path.exists(dst_dir):os.makedirs(dst_dir)withzipfile.ZipFile(zip_src,'r')aszfile:# 获取所有文件列表members=zfile.infolist()# 初始化进度条,total 是文件总大小total_size=sum(file.file_sizeforfileinmembers)print(f"正在解压{zip_src}{dst_dir}...")withtqdm(total=total_size,unit='B',unit_scale=True,unit_divisor=1024)aspbar:formemberinmembers:# --- 中文乱码修复核心代码 (可选) ---# Windows 压缩包通常用 CP437 编码文件名,Linux 需要转回 GBK 或 UTF-8try: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

希望这篇笔记能帮你解决 Linux 环境下的解压难题!如果觉得有用,欢迎点赞收藏。

http://www.jsqmd.com/news/278391/

相关文章:

  • 2026年可靠的船用锅炉厂家实力品牌推荐榜
  • 为何选择济南top10研究生留学中介?学员满意度高给出答案
  • 2026年成都TD板厂家排行榜,看看谁是行业领头人
  • 《透视 ImGui:从底层原理到面试通关》第二讲:渲染后端集成 —— 从内存指令到屏幕像素
  • Shopify平台API的对接开发
  • 2026液压万能材料试验机国内品牌实力排行榜:头部厂家技术参数与应用场景测评
  • Java版LeetCode热题100之柱状图中最大的矩形:单调栈深度解析与实战指南
  • 【Python高手进阶必备】:深入解析random、secrets、numpy等5大随机数模块
  • 无锡研究生留学中介top10有哪些?收费透明、服务对比详解
  • 【波束成形】双功能雷达与通信系统Matlab仿真
  • 在宁波选择研究生留学机构,如何挑选top10确保无隐形消费
  • 99%的Python开发者踩过的坑:浅拷贝与深拷贝的5大误解,你中招了吗?
  • 揭秘Python随机数生成器:5个你必须知道的实用技巧
  • 聊聊 C++ 中那些容易踩坑的运算符
  • UE5 C++(42):创建 timeLine 时间轴
  • 快速落地 JT/T 808 服务端:jt-framework
  • 郑州top10研究生留学中介推荐,稳定可靠保障您的留学选择
  • 【高薪程序员必会知识点】:深拷贝 vs 浅拷贝——3个实战案例带你彻底掌握
  • Python批量处理Word文档:告别重复劳动的3个核心技巧
  • 2026年广州诚信的汽配加盟商城,汽车配件加盟,连锁汽配加盟厂家综合实力参考
  • 20260121人工智能作业v2
  • 2025年国内靠谱的假肢公司推荐与深度解析
  • 专利--授权及花费(发明)
  • Python模块导入失败怎么办?(ModuleNotFoundError深度解析与实战修复)
  • 连接PostgreSQL总是失败?,一文搞定Python与PostgreSQL无缝集成
  • 揭秘Python操作PostgreSQL数据库:5个步骤快速上手并避免常见陷阱
  • 【Python报错终极指南】:3步快速解决ModuleNotFoundError难题
  • 如何用Python将字符串秒变datetime对象?这4个方法最有效
  • 还在用random.randint?这7种高级随机数生成方法你必须掌握,告别初级写法
  • 中电金信:源启行业AI开发与服务平台荣获“大湾区珠港澳IT产品创新奖”