针对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')解压成功效果


随时随地看视频