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 描述符(Descriptor)入门
Nov 20 Python
Python如何import文件夹下的文件(实现方法)
Jan 24 Python
Python IDLE清空窗口的实例
Jun 25 Python
解决Python 中英文混输格式对齐的问题
Jul 16 Python
Python 判断奇数偶数的方法
Dec 20 Python
python基础知识(一)变量与简单数据类型详解
Apr 17 Python
python常用函数与用法示例
Jul 02 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 Python
Python流程控制常用工具详解
Feb 24 Python
Pycharm中如何关掉python console
Oct 27 Python
python urllib库的使用详解
Apr 13 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
Javascript Global对象
2009/08/13 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
python 动态加载的实现方法
2017/12/22 Python
Python高级用法总结
2018/05/26 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Python基于locals返回作用域字典
2020/10/17 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
意大利奢侈品网站:Italist
2016/08/23 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python