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(Tornado)模拟登录小米抢手机
Nov 12 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
Apr 08 Python
使用Python的Twisted框架编写简单的网络客户端
Apr 16 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
python实现求最长回文子串长度
Jan 22 Python
python实现ID3决策树算法
Aug 29 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
对Python中plt的画图函数详解
Nov 07 Python
python实现AES加密与解密
Mar 28 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
pytorch训练神经网络爆内存的解决方案
May 22 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Python2中的raw_input() 与 input()
2015/06/12 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
基于Django用户认证系统详解
2018/02/21 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
python开启debug模式的方法
2019/06/27 Python
django 模型字段设置默认值代码
2020/07/15 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
大学生就业推荐信范文
2013/11/29 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
公司员工离职证明书
2014/10/04 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书