python利用7z批量解压rar的实现


Posted in Python onAugust 07, 2019

一开始我使用了rarfile这个库,奈何对于含有密码的压缩包支持不好,在linux上不抛出异常;之后有又尝试了unrar。。比rarfile还费劲。。

所以用了调用系统命令的方法,用7z来解压

通过apt可以安装上7z-full和7z的rar插件

有一个地方要注意 -o 和-p与后面的目录、密码之间没有空格!!

同样可以用这个代码暴力破解压缩包密码

# coding:utf-8 

import os

import zipfile

import traceback

import time

import shutil

import sys,getopt

 

succeedpath=""

unsucceedpath=""

psds={"2018","123456"}

 

 

opts,args=getopt.getopt(sys.argv[1:],"p:")

path=args[0]

for psd in args[1:]:

  psds.add(psd)

#for op,value in opts:

#  if op in ("-p","--password"):

#    psds.add(value)

 

 

def mkdirs(dirpath):

  global succeedpath,unsucceedpath

  succeedpath=os.path.join(dirpath,"0.succeed")

  unsucceedpath=os.path.join(dirpath,"0.unsucceed")

  if(not os.path.exists(succeedpath)):

    os.makedirs(succeedpath)

  if(not os.path.exists(unsucceedpath)):

    os.makedirs(unsucceedpath)

 

def extractdir(path):

  for filename in os.listdir(path):

    filepath=os.path.join(path,filename)

    if(os.path.isfile(filepath)):

      extractfile(filepath)

 

 

def extractfile(path):

  (dirpath,filen)=os.path.split(path)

  print("解压"+filen+"   ing...")

  try:

    if(filen.endswith(".rar") or filen.endswith(".zip")):

      path=os.path.abspath(path)

      dirpath=os.path.abspath(dirpath)

      cmd="7z x "+path+" -o"+dirpath+" -y "+" -p"

      state=False

      if(os.system(cmd)==0):

        state=True

      else:

        for psd in psds:

          cmdp="7z x "+path+" -p"+psd+" -y "+" -o"+dirpath

          if(os.system(cmdp)==0):

            state=True

            break

    else:

      return

    if (state):

      shutil.move(path,succeedpath)

    else:

      shutil.move(path,unsucceedpath)

      with open(os.path.join(dirpath,"errorinfo.txt"),"a+") as errorinfo:

        errorinfo.write("time:"+str(time.time())+"\n")

        errorinfo.write("解压出错!\n可能是密码错误!\n")

  except :

    with open(os.path.join(dirpath,"errorinfo.txt"),"a+") as errorinfo:

      errorinfo.write("time:"+str(time.time())+"\n")

      errorinfo.write("解压出错!\n")

      traceback.print_exc(file=errorinfo)

    shutil.move(path,unsucceedpath)

 
if(os.path.isdir(path)):

  dirpath=path

  mkdirs(dirpath)

  extractdir(dirpath)

elif(os.path.isfile(path)):

  filepath=path

  (dirpath,filename)=os.path.split(path)

  mkdirs(dirpath)

  extractfile(path)

else:

  print("输入错误!请重新输入!")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python代码检查工具pylint 让你的python更规范
Sep 05 Python
python转换摩斯密码示例
Feb 16 Python
python新手经常遇到的17个错误分析
Jul 30 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
使用Django实现商城验证码模块的方法
Jun 01 Python
django基础学习之send_mail功能
Aug 07 #Python
python实现本地批量ping多个IP的方法示例
Aug 07 #Python
Django model 中设置联合约束和联合索引的方法
Aug 06 #Python
对django 模型 unique together的示例讲解
Aug 06 #Python
python django model联合主键的例子
Aug 06 #Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 #Python
详解python中的index函数用法
Aug 06 #Python
You might like
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
业务部主管岗位职责
2014/01/29 职场文书
文明市民先进事迹
2014/05/15 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
vue elementUI批量上传文件
2022/04/26 Vue.js
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS