python利用7z批量解压rar的实现

作者:MaxZheng2018 时间:2021-05-02 18:58:31 

一开始我使用了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("输入错误!请重新输入!")

来源:https://www.cnblogs.com/maxzheng/p/10498479.html

标签:python,7z,批量,解压
0
投稿

猜你喜欢

  • 基于OpenCV的PHP图像人脸识别技术

    2023-11-23 22:02:54
  • 智能录入表格[适合BS模式项目的录入页面]

    2008-03-09 19:02:00
  • 简单代码实现可输入的下拉框功能(select)

    2008-10-20 19:52:00
  • Instr函数与InstrRev函数的区别

    2008-07-07 16:53:00
  • pandas数据类型之Series的具体使用

    2022-03-30 18:54:46
  • Python中staticmethod和classmethod的作用与区别

    2022-03-12 21:30:00
  • Python自动扫雷实现方法

    2023-11-19 19:04:55
  • JavaScript缓动动画函数的封装方法

    2023-08-07 10:48:26
  • 你凭什么说你的网站用户体验好

    2011-03-31 17:08:00
  • Python基于列表list实现的CRUD操作功能示例

    2022-06-15 16:02:14
  • Python字符串拼接六种方法介绍

    2021-07-30 01:34:14
  • asp实现*号隐藏IP地址

    2008-08-10 18:51:00
  • 我的快递一个月没动静于是赶紧上线python快递查询系统

    2021-04-06 23:49:01
  • 详解用python写一个抽奖程序

    2023-07-06 10:28:12
  • ASP 调用dll及封装dll实例

    2011-03-17 10:47:00
  • 如何调用Oracle存储过程?

    2009-11-15 20:13:00
  • Python的Django框架下管理站点的基本方法

    2022-02-14 12:37:19
  • PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】

    2023-11-15 01:31:13
  • ASP控制每页打印行数实例

    2008-04-13 06:48:00
  • 用ASP创建多栏选项列表SELECT

    2007-10-08 13:18:00
  • asp之家 网络编程 m.aspxhome.com