针对rar文件
从unrar导入了rarfile
pip安装完unrar后,运行的时候报错Couldn't find path to unrar library
需要下载rarlib的库文件,地址:http://www.rarlab.com/rar/UnRARDLL.exe,下载完成后,安装到指定的文件夹。此外,还需要配置环境变量:
64位操作系统配置x64文件夹中带64的UnRAR64.dll
32位操作系统配置直接配置UnRAR.dll
完成后重启PyCharm。
针对zip文件(可解压的压缩类型有限)
我一开始解压zip文件的时候没有反应,后面我用下面的代码进行了测试:
import zipfile fp = zipfile.ZipFile('D:/test.zip') # 文件的路径与文件名 fp.extractall(path='D:/Java',members=fp.namelist(), pwd=b'000555') # 循环解压文件到指定目录 fp.close() # 关闭文件,必须有,释放内存
经过我的查询源代码发现,此处可解压的ZIP类型只支持下面几种
于是在重新压缩文件设置密码的时候,勾选 了ZIP传统加密,才解压成功。
完整代码如下,本代码针对的密码字典为6位的纯数字,可根据需要找对应的密码字典:
import os import zipfile from unrar import rarfile #生成密码字典 # f = open('D:/SixPwdDict.txt','w') # for id in range(1000000): # password = str(id).zfill(6)+'\n' # print(password) # f.write(password) # f.close() def decryptRarZipFile(filename,desPath,pwdname): global fp try: fpPwd=open(pwdname) except: print('No file') return if filename.endswith('.zip'):#解压zip文件 fp=zipfile.ZipFile(filename) for pwd in fpPwd: success = 0 pwd = pwd.rstrip() try: print('当前密码:', pwd, '密码长度:', len(pwd)) fp.extractall(path=desPath, pwd=pwd.encode()) print('Success!password====>' + pwd) success = 1 fp.close() except: pass if success == 1: break elif filename.endswith('.rar'):#解压rar文件 fp=rarfile.RarFile(filename) for pwd in fpPwd: success=0 pwd=pwd.rstrip() try: print('当前密码:', pwd,'密码长度:',len(pwd)) fp.extractall(path=desPath,pwd=pwd) print('Success!password====>'+pwd) success=1 fp.close() except: pass if success==1: break fpPwd.close() if __name__=='__main__': filename='D:/txt.rar'#需解压的文件 desPath = 'D:/Java'#解压的目的路径 pwdname='D:/SixPwdDict.txt'#密码字典 if os.path.isfile(filename) and filename.endswith(('.zip','.rar')): decryptRarZipFile(filename,desPath,pwdname) else: print('Must be rar or zip file')
解压成功效果