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 相关文章推荐
django model去掉unique_together报错的解决方案
Oct 18 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
Django如何将URL映射到视图
Jul 29 Python
如何使用python代码操作git代码
Feb 29 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
Python中and和or如何使用
May 28 Python
Python pip使用超时问题解决方案
Aug 03 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 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 无限分类的树类代码
2009/12/03 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php中如何执行linux命令详解
2018/11/06 PHP
js下获取div中的数据的原理分析
2010/04/07 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
js实现星星打分效果的方法
2020/07/05 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
python列出目录下指定文件与子目录的方法
2015/07/03 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
Python高级用法总结
2018/05/26 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
Django websocket原理及功能实现代码
2020/11/14 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
实习自我鉴定
2013/12/15 职场文书
留学顾问岗位职责
2014/04/14 职场文书
基层工作经历证明
2015/06/19 职场文书
庆元旦主持词
2015/07/06 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书