python利用7z批量解压rar的实现
一开始我使用了rarfile这个库,奈何对于含有密码的压缩包支持不好,在linux上不抛出异常;之后有又尝试了unrar。。比rarfile还费劲。。
所以用了调用系统命令的方法,用7z来解压
通过apt可以安装上7z-full和7z的rar插件
有一个地方要注意-o和-p与后面的目录、密码之间没有空格!!
同样可以用这个代码暴力破解压缩包密码
#coding:utf-8 importos importzipfile importtraceback importtime importshutil importsys,getopt succeedpath="" unsucceedpath="" psds={"2018","123456"} opts,args=getopt.getopt(sys.argv[1:],"p:") path=args[0] forpsdinargs[1:]: psds.add(psd) #forop,valueinopts: #ifopin("-p","--password"): #psds.add(value) defmkdirs(dirpath): globalsucceedpath,unsucceedpath succeedpath=os.path.join(dirpath,"0.succeed") unsucceedpath=os.path.join(dirpath,"0.unsucceed") if(notos.path.exists(succeedpath)): os.makedirs(succeedpath) if(notos.path.exists(unsucceedpath)): os.makedirs(unsucceedpath) defextractdir(path): forfilenameinos.listdir(path): filepath=os.path.join(path,filename) if(os.path.isfile(filepath)): extractfile(filepath) defextractfile(path): (dirpath,filen)=os.path.split(path) print("解压"+filen+"ing...") try: if(filen.endswith(".rar")orfilen.endswith(".zip")): path=os.path.abspath(path) dirpath=os.path.abspath(dirpath) cmd="7zx"+path+"-o"+dirpath+"-y"+"-p" state=False if(os.system(cmd)==0): state=True else: forpsdinpsds: cmdp="7zx"+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) withopen(os.path.join(dirpath,"errorinfo.txt"),"a+")aserrorinfo: errorinfo.write("time:"+str(time.time())+"\n") errorinfo.write("解压出错!\n可能是密码错误!\n") except: withopen(os.path.join(dirpath,"errorinfo.txt"),"a+")aserrorinfo: 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("输入错误!请重新输入!")
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。