python利用7z批量解压rar
一开始我使用了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利用7z批量解压rar的更多相关文章
- Python调用7zip命令实现文件批量解压
Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Pyt ...
- python循环解压rar文件
python循环解压rar文件 C:. │ main.py │ ├─1_STL_算法简介 │ STL_算法简介.rar │ └─2_STL_算法_填充新值 STL_算法_填充新值.rar 事情是这样的 ...
- java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)
// java批量解压文件夹下的所有压缩文件(.rar..zip..gz..tar.gz) 新建工具类: package com.mobile.utils; import com.github.jun ...
- 使用C#压缩解压rar和zip格式文件
为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...
- linux解压rar压缩文件
服务器是阿里云的 centos 默认linux是没有安装解压rar,zip的软件的.而网上找到的yum install命令也没有用.而且这个rar并不是免费的,只有40天的试用期...真是坑啊 由于用 ...
- 工作随笔——tar命令批量解压
由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享: 第一: for tar in *.tar.gz; do tar xvf $tar ...
- Ubuntu 16.04 - 64bit 解压 rar 报错 Parsing Filters not supported
Ubuntu 16.04 - 64bit 解压rar 文件报错: 错误如下图: 原因: 未安装解压命令 unrar 参考博客: Error - "Parsing Filters not s ...
- ubuntu 解压rar
Ubuntu下解压rar文件的方法 一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简单的,只需要两个步骤 ...
- ubuntu解压rar文件
一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简 单的,只需要两个步骤就可以迅速搞定. ubuntu 下 ...
随机推荐
- 调用线程必须为 STA,因为许多 UI 组件都需要
WPF中,代码中准备控制控件内容时,有时会报错: 调用线程必须为 STA,因为许多 UI 组件都需要 我知道,在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一些 ...
- PHP数字左侧自动补零
1.输出数字为001,002... <?php $number=0; if($number<100) { $number=$number+1; $txt=sprintf("%03 ...
- 浅谈java缓存
java中要用到缓存的地方很多,首当其冲的就是持久层缓存,针对持久层谈一下: 要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定 ...
- xshell暂停串口的打印【转】
本文转载自:http://www.360doc.com/content/16/0311/10/7821691_541261680.shtml xshell不想CRT可以断开而停止打印,看这停下的打印信 ...
- (函数即服务)Faas的现状与未来
刚看到jolestar一位从法律转行程序员的前辈写了一篇Faas现状与未来的文章,里面很多观点都很有启发,或许正如他说的那样,由于Faas能较好的解决资源利用率和开发效率问题,2018年Faas将变得 ...
- 要自己当技术使用astgo运营网络电话系统,必须掌握的基本技术
知道什么是centos 知道怎么远程访问centos服务器 (常用工具 Secure Shell Client.WINSCP) 知道重启服务器的命令是 reboot 知道你的服务器是没有图形界面的,所 ...
- mysql大数据的分表
在实际业务运作中,我们经常遇到一个表中数据量过大的问题,这样的话,问题就来了.如何将一个表中的数据均衡的放到多个表中? 我的建议是,新建一个表,但是只有一个自增的id字段,将其作为分表的依据.有大数据 ...
- [Swift通天遁地]四、网络和线程-(3)线程组:使用DispatchGroup(调度组)对线程进行分组管理
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- group by 和 select
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面.
- sessionStorage 的使用
sessionStorage 的使用: sessionStorage.removeItem("data"); sessionStorage.getItem("data&q ...