python解压rar文件出现 rarfile.BadRarFile: Failed the read enough data:: req=643012 got=52错误,先让我们看看具体错误吧,如下:
Traceback (most recent call last):
File "D:/MyFiles/xxxxx/test.py", line 63, in <module>
target_file = read_files("C:\\Users\\xxxxxx\\1231_90")
File "D:/MyFiles/xxxxxxxx/test.py", line 17, in read_files
unzip_file(file ,target_file, "C:\\Users\\xxxxxx\\result")
File "D:/MyFiles/xxxxxxxx/test.py", line 38, in unzip_file
rar_file.extractall(destination_path)
File "D:\Users\xxxxxx\rarfile.py", line 847, in extractall
dst = self._extract_one(inf, path, pwd, not inf.is_dir())
File "D:\Users\xxxxxxxx\rarfile.py", line 912, in _extract_one
return self._make_file(info, dstfn, pwd, set_attrs)
File "D:\Users\xxxxxxx\rarfile.py", line 927, in _make_file
shutil.copyfileobj(src, dst)
File "D:\Users\xxxxxxxxxx\shutil.py", line 205, in copyfileobj
buf = fsrc_read(length)
File "D:\Users\xxxxxxxxxx\site-packages\rarfile.py", line 2197, in read
raise BadRarFile("Failed the read enough data: req=%d got=%d" % (orig, len(data)))
rarfile.BadRarFile: Failed the read enough data: req=54485 got=52
这里说明是解压rar文件的一个错误,我上网查阅了一下,说是缺少了指定的UnRAR.exe文件。
下面是我解压文件的代码:
def unzip_file(cur_dir,file_path, destination_path):
print(cur_dir)
# 判断文件格式 zip解压方式
if zipfile.is_zipfile(file_path):
zip_file =zipfile.ZipFile(file_path)
for zip_file_name in zip_file.namelist():
zip_file_new_name = zip_file_name
if check_is_encode_error(zip_file_name) == True:#解决乱码
try:
zip_file_new_name = zip_file_name.encode("cp437").decode("gbk")
except UnicodeDecodeError:
zip_file_new_name = "error"
if zip_file_name.endswith(".doc") or zip_file_name.endswith(".docx"):
# print(zip_file_new_name)
zip_file.extract(zip_file_name, destination_path)
os.rename(os.path.join(destination_path, zip_file_name), os.path.join(destination_path,cur_dir+"."+zip_file_new_name.split(".")[-1]))
zip_file.close()
elif rarfile.is_rarfile(file_path): #rar解压方式
rar_file = rarfile.RarFile(file_path)
rar_file.extractall(destination_path)
for rar_file_name in rar_file.namelist():
if rar_file_name.endswith(".doc") or rar_file_name.endswith(".docx"):
os.rename(os.path.join(destination_path, rar_file_name),
os.path.join(destination_path, cur_dir + "." + rar_file_name.split(".")[-1]))
rar_file.close()
else:
print('Unsupported file format')
注:下面是针对rar解压方式
,因为我zip解压方式也没有遇到问题
解决办法:这里有两个解决办法,都需要到UnRAR.exe文件
解决办法一:
步骤1:下载指定的UnRAR.exe文件,链接如下(可以自行到官网下载):
UnRAR.exe
步骤2:将下载好的UnRAR.exe文件,放置到我们运行的py文件的同一级目录下,我的如下图:
步骤3:重新运行程序即可
解决办法二:
步骤1:同上面的步骤一一样,下载指定的UnRAR.exe文件,链接如下(可以自行到官网下载):
UnRAR.exe
步骤2:配置系统环境变量(自行百度下,笔者在这里只是测试问题所在,并未对此方法进行操作)
步骤3:重新运行程序即可
注意:欢迎转载,转载时请注明来源