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
投稿

猜你喜欢

  • 你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)

    2024-04-30 08:46:07
  • Vue中如何优雅的捕获 Promise 异常详解

    2023-07-02 16:56:14
  • mysql查询时offset过大影响性能的原因和优化详解

    2024-01-13 14:17:36
  • python排序函数sort()与sorted()的区别

    2023-09-08 23:38:08
  • python内置堆的具体实现

    2022-12-18 08:39:43
  • Mysql InnoDB引擎中的数据页结构详解

    2024-01-16 20:51:29
  • MySQL中使用or、in与union all在查询命令下的效率对比

    2024-01-16 02:28:45
  • 微信小程序实现二维码生成器

    2024-04-16 10:29:06
  • OpenCV如何去除图片中的阴影的实现

    2023-07-08 22:49:29
  • Python实现复杂对象转JSON的方法示例

    2021-11-14 09:55:47
  • 使用 Python 处理3万多条数据只要几秒钟

    2023-08-03 15:21:06
  • python matplotlib绘图实现删除重复冗余图例的操作

    2023-11-02 22:36:44
  • 优化mysql的limit offset的例子

    2024-01-12 17:23:25
  • Python读取Pickle文件信息并计算与当前时间间隔的方法分析

    2023-11-17 20:18:13
  • OpenCV实战之AI照片背景替换

    2022-06-11 06:58:09
  • SQL Server中ISNULL函数介绍

    2009-09-09 21:23:00
  • 全面理解Python中self的用法

    2022-10-09 07:16:50
  • Python HTTP客户端自定义Cookie实现实例

    2023-12-16 01:19:30
  • Puppeteer环境搭建的详细步骤

    2024-05-13 09:58:56
  • SQL的SUBSTR()函数使用介绍

    2024-01-16 14:19:27
  • asp之家 网络编程 m.aspxhome.com