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和shell变量互相传递的几种方法
Nov 20 Python
基于Python实现的扫雷游戏实例代码
Aug 01 Python
用Python的线程来解决生产者消费问题的示例
Apr 02 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
Python模块WSGI使用详解
Feb 02 Python
python PyTorch预训练示例
Feb 11 Python
Ubuntu下Python2与Python3的共存问题
Oct 31 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
python变量的存储原理详解
Jul 10 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
Python接口自动化测试框架运行原理及流程
Nov 30 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
jquery的键盘事件修改代码
2011/02/24 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
python逆向入门教程
2018/01/15 Python
Python实现的堆排序算法示例
2018/04/29 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
python绘制地震散点图
2019/06/18 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Python编写单元测试代码实例
2020/09/10 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
英语四级考试作弊检讨书
2014/09/29 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
南湾猴岛导游词
2015/02/09 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
化验室安全管理制度
2015/08/06 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android