Python 解压缩(支持.zip/.rar/.7z格式)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

  • Python 解压缩(支持.zip/.rar/.7z格式)
    • 1. 使用场景
    • 2. 准备WinRAR压缩工具
    • 3.准备测试文件
    • 4. 基础实现代码
    • 5. 操作演示
    • 6.完整实现代码


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

Python 解压缩(支持.zip/.rar/.7z格式)

1. 使用场景

实现自动化解压多种格式的压缩文件,包括.zip、.rar和.7z格式。

2. 准备WinRAR压缩工具

  1. 从官网下载并安装WinRAR
  2. 记录WinRAR.exe文件路径(默认安装位置如下)
C:\Program Files\WinRAR\WinRAR.exe

安装示意图:
在这里插入图片描述

3.准备测试文件

  1. 将包含文件的本地文件夹分别压缩为三种格式:
    • TEST2ZIP.7z
    • TEST2ZIP.rar
    • TEST2ZIP.zip
  2. 创建目标文件夹TEST1RAR用于存放解压文件

在这里插入图片描述

4. 基础实现代码

示例代码如下
unpack_test.py

import subprocess
import osdef unpack(filepath, target_folder):# 获取文件目录和名称dir_folder = os.path.dirname(filepath)file_name_pre = os.path.splitext(os.path.basename(filepath))[0]print("当前目录:", dir_folder)	print("文件名:", file_name_pre)# 配置WinRAR命令command = ['C:\\Program Files\\WinRAR\\WinRAR.exe','x',                   # 解压保留目录结构os.path.abspath(filepath),target_folder.rstrip('\\') + '\\','-o+',                 # 覆盖已有文件'-y'                   # 自动确认]print("执行命令:", " ".join(command))result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)return target_folderif __name__ == '__main__':# 测试配置(可切换不同格式)file_pack = r'D:\重载\TEST2ZIP.zip'# file_pack = r'D:\重载\TEST2ZIP.7z'# file_pack = r'D:\重载\TEST2ZIP.rar'target_folder = r'D:\重载\TEST1RAR'unpack(file_pack, target_folder)

5. 操作演示

  1. 在unpack_test.py目录打开CMD
    在这里插入图片描述

在这里插入图片描述
2. 执行解压命令

py unpack_test.py

执行后输出如下
在这里插入图片描述3. 检查解压结果
在这里插入图片描述
文件夹已存在,打开可查看打包前的文件夹内容
在这里插入图片描述

6.完整实现代码

示例代码如下
unpack_test.py

# 所需引入的库
import subprocess
import os# 解压通用函数入口
def unpack(filepath, target_folder):# 获取文件所在目录dir_folder = os.path.dirname(filepath)print("dir_folder----> ",dir_folder)# # 获取文件名(包含后缀,如test1.rar、test2.zip、test3.7z)# file_name_all = os.path.basename(filepath)# print("file_name_all----> ",file_name_all)# # 将文件名和后缀分开,获取分割后的数组# file_name_all_list = os.path.splitext(file_name_all)# print("file_name_all_list----> ",file_name_all_list)# # 获取文件名(不包含后缀,如test1)# file_name_pre = file_name_all_list[0]# 以上注释代码的整合 目的为了获取压缩包文件名(不带后缀)file_name_pre = os.path.splitext(os.path.basename(filepath))[0]print("file_name_pre----> ",file_name_pre)# 除了指定固定的输出目录,还可以使用文件名作为输出目录# 将rar文件所在目录和文件名(不包含后缀)拼接,成为文件夹的路径,用于解压后存储文件# target_folder = os.path.join(dir_folder, file_name_pre)# print("target_folder----> ",target_folder)# if not os.path.exists(target_folder):# os.makedirs(target_folder)# 本地winrar命令集成command = [# 本地WinRAR.exe文件路径'C:\\Program Files\\WinRAR\\WinRAR.exe',# 解压并保留完整目录结构'x',           # 传入源RAR文件的绝对路径(引号包裹,防止路径中有空格)os.path.abspath(filepath),# 目标目录(确保路径以一个反斜杠结束,否则WinRAR会出错),如果该参数省略,则会默认为当前目录target_folder.rstrip('\\') + '\\',# 覆盖已存在的文件'-o+',         # 将压缩包名称作为子目录添加到目标路径中,如果添加该参数,则压缩包名称会作为子目录添加到目标路径中,产生两层一样的目录# '-ad',# 后台运行# '-ibck',       # 自动确认所有提示'-y'           ]print("正在执行命令:", " ".join(command))# 运行命令 subprocess本身会处理空格问题result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)# 返回目标目录return target_folderif __name__ == '__main__':# 测试rar解压# file_pack = r'D:\重载\TEST2ZIP.rar'# target_folder = r'D:\重载\TEST1RAR'# 测试7z解压# file_pack = r'D:\重载\TEST2ZIP.7z'# target_folder = r'D:\重载\TEST1RAR'# 测试zip解压file_pack = r'D:\重载\TEST2ZIP.zip'target_folder = r'D:\重载\TEST1RAR'unpack(file_pack, target_folder)

📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86530.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙虎榜——20250627

上证指数放量收阴线,回踩5天均线,但个股总体涨多跌少。 深证指数缩量收十字星,在前期压力位震荡。 2025年6月27日龙虎榜行业方向分析 1. 金融科技(跨境支付数字安全) 代表标的:吉大正元(跨境认…

三步实现B站缓存视频转MP4格式

本期我们来实现如何将B站缓存的视频转成MP4格式,直接在本地播放。 首先我们在Bilibili客户端缓存一个视频,保存的文件如下: 这里有两个m4s文件,大的哪个是视频文件,小的是音频文件,这里我们用视频播放软件…

MySQL 与 Oracle 事务:深度解析与全面对比

在数据库管理领域,事务是确保数据一致性和完整性的核心机制,它允许用户将一系列操作视为一个不可分割的整体,要么全部成功执行,要么全部回滚。MySQL 和 Oracle 作为两款广泛使用的关系型数据库管理系统,它们在事务处理…

麒麟系统如何输出启动日志到串口

1、台式机系统启动日志输出到串口 (1)GRUB配置 编辑GRUB配置文件(如/etc/default/grub),添加或修改以下参数: GRUB_CMDLINE_LINUX“consoletty0 consolettyS0,115200n8” tty0:表示将日志输出…

JUC:2栈和栈帧的定义

这部分内容虽然是JVM中的定义,但是在juc中属于底层知识,必须要学习 每个线程在创建时,就会将自身的资源存储在栈中,将线程需要运行的方法存放在方法区。 栈中会存储方法的局部变量、方法的参数以及方法返回的地址,这…

阿里云OSS上传文件Utils (@PostConstruct注解配置+Environment )

首先在 application.yaml 配置bucketName, endpoint, accessKeyId, accessKeySecret这里利用的是 spring 的生命周期, 在 bean 实例化后,使用PostConstruct注解 Environment 属性 进行spring上下文环境赋值 package com.shuai.utils;import com.aliyun.oss.*; import com.aliy…

Jetson家族横向对比:如何选择你的边缘计算设备

Jetson家族横向对比:如何选择你的边缘计算设备 一、边缘计算设备选型核心维度 在选择Jetson平台前,需明确以下关键指标: 算力需求:TOPS(INT8) / FP16精度功耗限制:被动散热/主动散热接口扩展:CSI摄像头数…

《聊一聊ZXDoc》之汽车服务导向SOME/IP

ZXDoc支持SOME/IP功能,通过服务导向架构实现跨域通信标准化,降低系统耦合,支持动态服务发现与调用,提升分布式系统扩展性和维护效率。 什么是SOME/IP? SOME/IP(Scalable service-Oriented MiddlewarE ov…

Learning Semantic-Aware Knowledge Guidance for Low-Light Image Enhancement 论文阅读

学习语义感知知识引导用于低光照图像增强 摘要 低光图像增强(LLIE)研究如何改善照明并生成正常光照的图像。大多数现有方法通过全局和均匀的方式改进低光图像,而没有考虑不同区域的语义信息。如果没有语义先验,网络可能会容易偏…

【(Topk问题及其二叉树遍历】

Topk问题及其二叉树遍历 1.Topk问题2.二叉树的前序,中序,后序3.求二叉树的个数(TreeSize)。4.求二叉树的最大深度(maxDepth)。5.求二叉树的第K层的节点个数(TreeKLevel)。6.查找二叉…

AI+实时计算如何赋能金融系统?DolphinDB 在国泰君安期货年度中期策略会的演讲

6月25日,国泰君安期货2025年度中期策略会在上海顺利开幕。本次策略会以“观势明变,本固枝荣”为主题,特邀15位重量级行业嘉宾和52位明星分析师发表精彩观点,DolphinDB 受邀出席会议并作主题演讲。 实时计算如何赋能量化投研交易 …

PHP Protobuf 手写生成器,

✅ 以下是一个纯 PHP 编写的通用 Protobuf 二进制生成器,支持: varint fixed32 fixed64 length-delimited(如字符串、嵌套 message) 嵌套结构 (nested) 多字段 repeated ✅ 封装器代码(可直接用) &…

喜讯 | Mediatom斩获2025第十三届TopDigital创新营销奖「年度程序化广告平台」殊荣

6月27日,2025第十三届TopDigital创新营销盛典在上海圆满落幕,TopDigital创新营销奖获奖结果也已正式揭晓。本届TopDigital创新营销奖共有694家参展企业,3326件案例,AdMergeX旗下Mediatom媒体变现SaaS及服务平台在众多作品中脱颖而…

SQL 中 EXISTS 的原理与作用详解

平常也一直在用EXISTS 来进行逻辑判断,但是从来没有正经理解它,只知道找到有就返回True,没有就返回False。那么今天详细的理解一下(主要借鉴了CSDN 其他博客文章,以及自己做的一个小例子) 一、EXISTS是什么…

【Docker】解决:构建(docker build)或重新运行容器时,丢失apt-get update问题

一、解决:构建(docker build)或重新运行容器时,丢失apt-get update问题 在 Docker 容器中,每次构建(docker build)或重新运行容器时,默认情况下所有更改都会丢失,因为容…

流程管理系统方案成本评估报告(第一稿,复盘明确数据不准确,仅供参考哦)

​​一、成本评估框架​​ 所在制造业流程数字化转型的成本需从​​一次性投入​​与​​持续运营成本​​两个维度分析,并量化​​直接收益​​与​​间接收益​​。详细评估模型初稿: ​​二、成本构成与数据支撑​​ ​​1. 一次性投入成本​​ ​​项目​​​​费用范围…

高并发分布式锁解决方案对比与选型指南

高并发分布式锁解决方案对比与选型指南 在大规模分布式系统中,分布式锁是确保资源互斥访问、保证数据一致性的关键组件。针对不同业务场景,分布式锁的实现方案多种多样,各有优缺点。本文将从问题背景出发,对Redis原生锁/RedLock、…

全面掌握Vue 3响应式:ref自动解包、reactive对象替换及响应式丢失问题

Vue 3的响应式系统是其最核心的特性之一,主要通过ref和reactive这两个API来实现。本文将详细介绍这两个API的使用方法、区别以及最佳实践。 1. ref()的基本使用 ref()用于创建一个响应式的数据引用。它可以包装任何类型的值,包括基本类型和对象类型。 …

【科普】 AI大模型应用架构图大全

AI大模型应用架构图大全 AI大模型技术全景视图: AI大模型通用技术架构图 AI大模型通用技术架构图 AI大模型通用技术架构图 RAG知识库业务架构图 AI农业大模型技术架构图 AI导购大模型技术架构图 AI导购大模型技术架构图 AI大模型合规风控管理架构图 AI大模型合规管…

Educational Codeforces Round 180 (Rated for Div. 2) A-D题解

A. Race 题意 在一个数轴上,奖品可能出现在 x x x 点或 y y y 点,Alice 现在在 a a a 点,请问Bob是否存在一个点 b b b,使得无论奖品出现在 x x x 点还是 y y y 点,Bob都能比Alice先拿到( ∣ b −…