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的Django框架下管理站点的基本方法
Jul 17 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
使用python为mysql实现restful接口
Jan 05 Python
python爬取淘宝商品销量信息
Nov 16 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
Python 存取npy格式数据实例
Jul 01 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
Python Matplotlib绘制条形图的全过程
Oct 24 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页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
js微信支付实现代码
2016/12/22 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
python封装对象实现时间效果
2020/04/23 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
python实现名片管理系统
2018/11/29 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
python config文件的读写操作示例
2019/09/27 Python
Python2与Python3的区别点整理
2019/12/12 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
高中生校园生活自我评价
2013/09/19 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
争先创优演讲稿
2014/09/15 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
办公室岗位职责范本
2015/04/11 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript