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调用fortran模块
Apr 08 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
对Python3中的print函数以及与python2的对比分析
May 02 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
Python之用户输入的实例
Jun 22 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
python实现四人制扑克牌游戏
Apr 22 Python
500行python代码实现飞机大战
Apr 24 Python
如何使用Python实现一个简易的ORM模型
May 12 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
星际流派综述
2020/03/04 星际争霸
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
JavaScript中URL编码函数代码
2011/01/11 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
python创建文件备份的脚本
2018/09/11 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
python数据挖掘需要学的内容
2019/06/23 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
Python识别html主要文本框过程解析
2020/02/18 Python
Python接口测试文件上传实例解析
2020/05/22 Python
python绘制趋势图的示例
2020/09/17 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
网上开商店的创业计划书
2014/01/19 职场文书
应聘面试自我评价
2014/01/24 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android