使用rarfile库解密含加密文件名的密码保护RAR文件时出现BadRarFile错误
rarfile库解密含加密文件名的密码保护RAR文件时出现BadRarFile错误
我来帮你搞定这个问题!你碰到的rarfile.BadRarFile: Failed the read enough data: req=592 got=0错误,确实和你加密了RAR文件名的操作直接相关——这是rarfile库处理这类加密文件时的一个典型问题。
问题原因
当你给RAR文件加密文件名时,整个文件的目录结构都是加密状态的。而你原来的代码只在extractall()方法里传密码,这时候rarfile库已经尝试去读取未加密的目录信息失败了,自然就抛出了读取数据不足的错误。反之,当你不加密文件名时,库能直接读取文件结构,再用密码解密内容,所以不会出问题。
解决方法
你需要把密码提前传给RarFile实例,让它在读取文件目录时就能用密码解密,有两种常用方式:
方式一:初始化时直接传入密码
from rarfile import RarFile with RarFile('daisy.rar', 'r', pwd='@Daisy_Cloud') as myrar: myrar.extractall()
方式二:先设置密码再执行解压
from rarfile import RarFile myrar = RarFile('daisy.rar', 'r') myrar.setpassword('@Daisy_Cloud') myrar.extractall() myrar.close()
额外注意事项
- 建议更新rarfile到最新版本:旧版本对加密文件名的支持可能有bug,执行
pip install --upgrade rarfile就能更新。 - 验证文件完整性:先用WinRAR或7-Zip手动打开
daisy.rar确认文件没损坏,密码确实能正常解密,排除文件本身的问题。
备注:内容来源于stack exchange,提问作者Mohamed Belkhira
相关产品推荐
相关产品推荐

