iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用python怎么批量解压带密码的压缩包
  • 830
分享到

使用python怎么批量解压带密码的压缩包

2023-06-15 07:06:16 830人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

今天就跟大家聊聊有关使用python怎么批量解压带密码的压缩包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。环境需求windows系统Python 3对于解压RAR文件,需要安装Wi

今天就跟大家聊聊有关使用python怎么批量解压带密码的压缩包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

环境需求

  • windows系统

  • Python 3

  • 对于解压RAR文件,需要安装WinRAR

  • 对于解压7z/zip等其他7-Zip支持解压的文件,需要安装7-Zip

用法 Usage

直接拖入文件夹或压缩文件即可批量解压缩包含密码的压缩文件。如果拖入的是文件夹,则会把该文件夹下的压缩文件解压缩,但不进入下一级目录。通过设置PASSWD来设置字典,通过设置DELETEIT来设置解压后是否删除被成功解压的压缩文件。本脚本会通过文件的后缀识别该文件是否为压缩文件。

你可以把WinRAR目录下的Unrar.exe和7-Zip目录下的7z.exe直接复制到这个toolUnRar.py文件的相同目录下,这样就可以携带使用了。

参数 Parameters

  • PASSWD = ["hello","123456"] :你的密码本,该脚本会从这个数组中不断试验密码来解压缩,直到成功为止。

  • DELETEIT :一个危险的参数。为真时,该脚本会直接删除成功解压的压缩文件。为假则不会删除。

  • LOC_WINRAR = "C:\Program Files\WinRAR\" 你的WinRAR安装位置。就算这个变量的设置的不对,该程序也会在可能的位置来寻找对应的程序。

  • LOC_7Z:7-Zip的安装位置。

  • SAVE_MODE = True:如果该脚本无法通过后缀判断这是不是压缩文件,则不对该文件进行操作。

完整代码

#!/usr/bin/python3# -*- coding: UTF-8 -*-# Created by Mario Chen, 04.04.2021, Shenzhen# My GitHub site: https://github.com/Mario-Heroimport sysimport osimport subprocess# you can change it >>>>>PASSWD     = ["123456","hello"]  # the possible passWordsDELETEIT   = False                                     # DANGER!! If it is True,will delete rar file after extractionLOC_WINRAR = "C:\\Program Files\\WinRAR\\"              # location of WinRARLOC_7Z     = "C:\\Program Files\\7-Zip\\"               # location of 7-ZipSAVE_MODE  = True                                       # if the suffix of file doesn't look like a compressed file, then do nothing with it.# <<<<< you can change itPROGRAM_RAR  = "UnRAR.exe" # the program we usePROGRAM_7Z   = "7z.exe"    # the program we useLOC_S_WINRAR = ["C:\\Program Files\\WinRAR\\","C:\\Program Files (x86)\\WinRAR\\","./",""] # some possible locations of WinRARLOC_S_7Z     = ["C:\\Program Files\\7-Zip\\","C:\\Program Files (x86)\\7-Zip\\","./",""]   # some possible locations of 7-ZipRAR_FILE     = ["rar","zip","7z","tar","gz","xz","bzip2","gzip","wim","arj","cab","chm","cpio","cramfs","deb","dmg","fat","hfs","iso","lzh","lzma","mbr","msi","nsis","ntfs","rpm","squashfs","udf","vhd","xar","z"]NOT_RAR_FILE = ["jpg","exe","png","mkv","mp4","mp3","avi","mov","jpeg","wav","gif","mpeg","WEBp","txt","doc","docx","ppt","pptx","xls","xlsx","html","wps","torrent","swf","bmp","crdownload","xltd","downloading"]ENABLE_RAR = False         # initial state onlyENABLE_7Z = False          # initial state only# for guessing >>>GUESS_FLAG_INIT     = ["密码", "码", "password", "Password"]    #0GUESS_FLAG_START_1  = [":", ":"]                            #1GUESS_FLAG_START_2  = ["是", "为", "is", "are"," "]          #1GUESS_FLAG_END      = ["\n","   "]                           #2GUESS_FLAG_DIVIDE   = ["或是", "或", " or "]                 #3# <<< for guessingdef guessWDComment(comment):    guess_flag = 0    guess_wd: list[str] = []    guess_ps = 0    cutIn = 0    cutOut = 0    while True:        if guess_flag == 0:            guess_newPs = len(comment)            guess_len = 0            for initStr in GUESS_FLAG_INIT:                ps_temp = comment.find(initStr, guess_ps)                if ps_temp == -1:                    continue                else:                    if ps_temp<guess_newPs:                        guess_newPs = ps_temp                        guess_len = len(initStr)            if guess_newPs == len(comment):                if not guess_wd:                    cutIn = 0                    cutOut = len(comment)                    guess_flag = 3                else:                    break            else:                guess_ps = guess_newPs + guess_len                guess_flag = 1        elif guess_flag == 1:            found_temp = False            found_temp_2 = False            guess_newPs = len(comment)            for startStr in GUESS_FLAG_START_1:                ps_temp = comment.find(startStr, guess_ps, guess_ps + 20)                if ps_temp == -1:                    continue                else:                    if ps_temp < guess_newPs:                        found_temp = True                        guess_newPs = ps_temp + len(startStr)                        guess_flag = 2            if found_temp:                guess_ps = guess_newPs                cutIn = guess_ps                continue            else:                guess_newPs = len(comment)                for startStr in GUESS_FLAG_START_2:                    ps_temp = comment.find(startStr, guess_ps, guess_ps + 20)                    if ps_temp == -1:                        continue                    else:                        if ps_temp < guess_newPs:                            found_temp_2 = True                            guess_newPs = ps_temp + len(startStr)                            guess_flag = 2            if found_temp_2:                guess_ps = guess_newPs            cutIn = guess_ps            guess_flag = 2        elif guess_flag == 2:            guess_newPs = len(comment)            for endStr in GUESS_FLAG_END:                ps_temp = comment.find(endStr, guess_ps)                if ps_temp == -1:                    continue                else:                    if ps_temp < guess_newPs:                        guess_newPs = ps_temp            guess_ps = guess_newPs            guess_flag = 3            cutOut = guess_ps        elif guess_flag == 3:            found_cut_temp = False            for divideStr in GUESS_FLAG_DIVIDE:                if comment.find(divideStr, cutIn, cutOut) != -1:                    found_cut_temp = True                    for wd in comment[cutIn:cutOut].split(divideStr):                        guess_wd.append(wd.strip())                    break            if not found_cut_temp:                guess_wd.append(comment[cutIn:cutOut].strip())            guess_flag = 0        else:            guess_flag = 0    return guess_wddef isCompressedFile(file):    file = file.lower()    for rar in RAR_FILE:        if file.endswith("." + rar):            return True    for media in NOT_RAR_FILE:        if file.endswith("." + media):            return False    return not SAVE_MODEdef utfIsNumber(uchar):    return uchar >= u'\u0030' and uchar<=u'\u0039'def winRarDo(folder, file, wd):    extractStr = " x -y -p" + wd + " \"" + folder + "\\" + file + "\" \"" + folder + "\\\""    extM = subprocess.call("@\""+LOC_WINRAR+PROGRAM_RAR+"\""+extractStr,shell=True)         if extM == 1:    # not rar file        return 2    elif extM == 11: # wrong password        return 1    elif extM != 0:  # error        return 1    else:        return 0def z7Do(folder, file, wd):    extractStr = " x -y -p" + wd + " \"" + folder + "\\" + file + "\" -o\"" + folder + "\\\""     extM = subprocess.call("@\""+LOC_7Z+PROGRAM_7Z+"\""+extractStr,shell=True)    if extM !=0: # error        return 1    else:        return 0def unrarFile(folder, file):    successThisFile = False    fileNameEncrypted = True    if not folder:        cutPos = file.rindex("\\")        folder = file[:cutPos]        file = file[cutPos+1:]        #print(folder)        #print(file)    if ENABLE_RAR and file.endswith(".rar"):        winRarReturn = winRarDo(folder, file, PASSWD[0])        #print(winRarReturn)        if winRarReturn == 0:            #successThisFile = True            return True        elif winRarReturn == 2:            pass        else:            getCommentStr = " l -p0 -z" + " \"" + folder + "\\" + file + "\""            commentNumber = subprocess.call("@\""+LOC_WINRAR+PROGRAM_RAR+"\""+getCommentStr,shell=True)            #commentNumber = 1            if commentNumber == 0:                commentM = subprocess.getstatusoutput("@\""+LOC_WINRAR+PROGRAM_RAR+"\""+getCommentStr)                if commentM[0] == 0:                    fileNameEncrypted = False                    comment = commentM[1][(commentM[1].index("\n\n")+2):commentM[1].index(folder)]                    comment = comment[0:comment.rindex("\n\n")]                    #print(comment)                    if comment:                        wdArray = guessWDComment(comment)                        print("Possible passwords:", wdArray)                        for wd in wdArray:                            winRarReturn = winRarDo(folder, file, wd)                            if winRarReturn == 1:                                continue                            elif winRarReturn == 0:                                successThisFile = True                                break                            elif winRarReturn == 2:                                break                            else:                                break            if successThisFile:                return True            for index in range(1,len(PASSWD)):                winRarReturn = winRarDo(folder, file, PASSWD[index])                if winRarReturn == 1:                    continue                elif winRarReturn == 0:                    successThisFile = True                    PASSWD[0],PASSWD[index]=PASSWD[index],PASSWD[0]                    break                elif winRarReturn == 2:                    break                else:                    break                if not successThisFile:        if ENABLE_7Z:            for index in range(len(PASSWD)):                z7Return = z7Do(folder, file, PASSWD[index])                if z7Return == 1:                    continue                else:                    successThisFile = True                    PASSWD[0],PASSWD[index]=PASSWD[index],PASSWD[0]                    break                         if not successThisFile:         print("Failed:"+file)    return successThisFiledef unrar(folder):    if os.path.isdir(folder):        print(folder)        file_list = os.listdir(folder)        for file in file_list:            if os.path.isdir(folder + "/" + file):                #print(folder +"/"+ file)                #unrar(folder +"/"+file)                pass            else:                if isCompressedFile(file):                    if unrarFile(folder, file):                        if DELETEIT:                            os.remove(folder + "/" + file)    else:        if isCompressedFile(folder):            if unrarFile("", folder):                if DELETEIT:                    os.remove(folder)                  if __name__ == '__main__':    if len(sys.argv) <= 1:        sys.exit(1)    testRar = os.popen("\""+LOC_WINRAR+PROGRAM_RAR+"\"").read()        if not testRar:       for loc in LOC_S_WINRAR:           testRar = os.popen("\""+loc+PROGRAM_RAR+"\"").read()           if testRar:               LOC_WINRAR = loc               ENABLE_RAR = True               break    else:        ENABLE_RAR = True    test7z = os.popen("\""+LOC_7Z+PROGRAM_7Z+"\"").read()        if not test7z:       for loc in LOC_S_7Z:           test7z = os.popen("\""+loc+PROGRAM_7Z+"\"").read()           if test7z:               LOC_7Z = loc               ENABLE_7Z = True               break    else:        ENABLE_7Z = True    if (not ENABLE_RAR) and (not ENABLE_7Z):        print("Cannot find winRAR and 7-zip")        sys.exit(1)    while len(PASSWD) < 2:        PASSWD.append("0")       for folder in sys.argv[1:]:        #print(folder)        unrar(folder)    print("Finish.")    #subprocess.call("pause",shell=True)    sys.exit(0)

看完上述内容,你们对使用python怎么批量解压带密码的压缩包有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网Python频道,感谢大家的支持。

--结束END--

本文标题: 使用python怎么批量解压带密码的压缩包

本文链接: https://www.lsjlt.com/news/278673.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用python怎么批量解压带密码的压缩包
    今天就跟大家聊聊有关使用python怎么批量解压带密码的压缩包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。环境需求Windows系统Python 3对于解压RAR文件,需要安装Wi...
    99+
    2023-06-15
  • python怎么批量压缩文件生成密码
    要批量压缩文件并生成密码,可以使用Python的zipfile库和random库。下面是一个示例代码,用于批量压缩指定文件夹中的所有...
    99+
    2023-08-25
    python
  • Python怎么批量解压和压缩文件夹
    这篇文章主要介绍“Python怎么批量解压和压缩文件夹”,在日常操作中,相信很多人在Python怎么批量解压和压缩文件夹问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么批量解压和压缩文件夹”的疑...
    99+
    2023-06-29
  • Python批量解压&压缩文件夹的示例代码
    目录一、python批量解压二、python批量压缩一、python批量解压 提示:如果是重要数据解压前请先备份,解压后会覆盖原压缩文件!! 解压前: 解压后:文件名为英文: 文...
    99+
    2024-04-02
  • Python如何破解压缩包密码
    目录简介:1.步骤1.环境2.判断文件格式3.判断是否有密码4.密码字典 自己写或者下载相应的软件生成。5.解压文件2.代码1.在线调试2.脚本运行简介: 破解rar和zip压缩包。...
    99+
    2024-04-02
  • C#实现批量压缩和解压缩的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-26
    C#压缩 解压缩 C#压缩 C# 解压缩
  • [python]批量解压文件夹下所有压缩包(rar、zip、7z)
            在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。Franpper今天给大家带来递归遍历指定路径下的所有文件和文件夹,批量解压所有压缩包的方法,帮大家一键解压。  ...
    99+
    2023-09-06
    python
  • 怎么使用python对图片进行批量压缩
    本篇内容主要讲解“怎么使用python对图片进行批量压缩”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用python对图片进行批量压缩”吧!使用Python和Pillow模块压缩图片Pil...
    99+
    2023-07-02
  • python怎么实现图片批量压缩
    这篇文章主要介绍python怎么实现图片批量压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮...
    99+
    2023-06-14
  • 怎么用Python破解了同事加密的压缩包
    今天就跟大家聊聊有关怎么用Python破解了同事加密的压缩包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。事情的经过是这样的:又是奶茶,行吧行吧。快点开工,争取大伟回来之前搞定。大伟...
    99+
    2023-06-02
  • Linux压缩和解压缩命令怎么使用
    在Linux中,使用以下命令来压缩和解压缩文件和目录:1. 压缩文件:- `gzip`:使用gzip算法压缩文件,生成`.gz`后缀...
    99+
    2023-09-29
    Linux
  • python批量压缩图片的脚本代码分享
    本篇文章和大家了解一下python批量压缩图片的脚本代码分享。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。简介用Python批量压缩图片,把文件夹或图片直接拖入即可需要 NeedsPython 3Pillow (用pip...
    99+
    2023-06-15
  • 使用Python批量压缩tif文件操作步骤
    1.前言 我在进行DEM数据的裁剪时,发现各个省的数据量非常大,比如说四川省的30m的DEM数据的大小为2G。考虑到有限的电脑磁盘空间,我对Tif文件采用了LZW压缩。 2.流程 ...
    99+
    2024-04-02
  • 如何使用python对图片进行批量压缩详解
    目录前言使用Python和Pillow模块压缩图片1、优化flag2、渐进式JPEG3、JPEG动态质量使用Python和Selenium模块操纵Squoosh批量压缩图片Pytho...
    99+
    2024-04-02
  • win8怎么使用自带解压缩工具
    win8怎么使用自带解压缩工具,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。压缩文件可以减少文件体积,便于快捷运输。在win8系统中,就有自带的解压缩工具。压缩...
    99+
    2023-06-28
  • Vue怎么实现文件批量打包压缩下载
    在Vue中实现文件的批量打包压缩下载可以通过以下步骤来实现: 首先,创建一个按钮或者其他触发下载的元素,当用户点击这个按钮时触发...
    99+
    2024-03-08
    vue
  • 使用 Python 破解压缩文件的密码的思路详解
    经常遇到百度网盘的压缩文件加密了,今天我们就破解它! 实现思路 上篇文章给大家介绍了爆破密码的思路,感兴趣的朋友可以了解下。 其实都大同小异:无非就是字典爆破,就看你是有现成密码字典...
    99+
    2024-04-02
  • java中怎么利用7zip对压缩包进行解压的
    java中怎么利用7zip对压缩包进行解压的?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。7zip命令行7z <command> [<switches&g...
    99+
    2023-05-31
    java ava 7zip
  • 怎么使用vue打包gzip压缩
    这篇文章主要讲解了“怎么使用vue打包gzip压缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用vue打包gzip压缩”吧!开局一张图:可以看出,在项目部署后,我们的资源文件请求都会...
    99+
    2023-07-02
  • Python实现批量压缩文件/文件夹zipfile的使用
    目录【Python压缩文件夹】导入“zipfile”模块【python压缩文件】导入“zipfile”模块补充zipfile是python里用来做zip格式编码的压缩和解压缩的,由于...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作