🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- Python 解压缩(支持.zip/.rar/.7z格式)
- 1. 使用场景
- 2. 准备WinRAR压缩工具
- 3.准备测试文件
- 4. 基础实现代码
- 5. 操作演示
- 6.完整实现代码
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
Python 解压缩(支持.zip/.rar/.7z格式)
1. 使用场景
实现自动化解压多种格式的压缩文件,包括.zip、.rar和.7z格式。
2. 准备WinRAR压缩工具
- 从官网下载并安装WinRAR
- 记录WinRAR.exe文件路径(默认安装位置如下)
C:\Program Files\WinRAR\WinRAR.exe
安装示意图:
3.准备测试文件
- 将包含文件的本地文件夹分别压缩为三种格式:
- TEST2ZIP.7z
- TEST2ZIP.rar
- TEST2ZIP.zip
- 创建目标文件夹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. 操作演示
- 在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)
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇