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中正则表达式的用法实例汇总
Aug 18 Python
Python实现简单状态框架的方法
Mar 19 Python
详解Python中的条件判断语句
May 14 Python
python实现字符串和字典的转换
Sep 29 Python
Python lambda表达式用法实例分析
Dec 25 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
python实现飞机大战游戏
Oct 26 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
Python缓存技术实现过程详解
Sep 25 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
基于Python的OCR实现示例
Apr 03 Python
详解Pycharm安装及Django安装配置指南
Sep 15 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
20个PHP常用类库小结
2011/09/11 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
Vue程序调试的方法
2019/06/17 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
如何基于线程池提升request模块效率
2020/04/18 Python
python中列表的含义及用法
2020/05/26 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
C语言编程练习
2012/04/02 面试题
生物制药专业自我鉴定
2014/02/19 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
小学生读书活动总结
2014/06/30 职场文书
改革共识倡议书
2014/08/29 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
支教个人总结
2015/03/04 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
python​格式化字符串
2022/04/20 Python