当前位置: 代码网 > it编程>前端脚本>Python > Python自动化解压多种格式的压缩文件(支持.zip/.rar/.7z格式)

Python自动化解压多种格式的压缩文件(支持.zip/.rar/.7z格式)

2025年06月30日 Python 我要评论
1. 使用场景实现自动化解压多种格式的压缩文件,包括.zip、.rar和.7z格式。2. 准备winrar压缩工具从官网下载并安装winrar记录winrar.exe文件路径(默认安装位置如下)c:\

1. 使用场景

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

2. 准备winrar压缩工具

从官网下载并安装winrar

记录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 os

def 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_folder

if __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_folder

if __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)

到此这篇关于python自动化解压多种格式的压缩文件(支持.zip/.rar/.7z格式)的文章就介绍到这了,更多相关python解压文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com