python解压rar文件出现 rarfile.BadRarFile: Failed the read enough data:

1年前 ⋅ 1066 阅读

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文件的同一级目录下,我的如下图:    1688440049274.jpg
   步骤3:重新运行程序即可
解决办法二:
   步骤1:同上面的步骤一一样,下载指定的UnRAR.exe文件,链接如下(可以自行到官网下载): UnRAR.exe
   步骤2:配置系统环境变量(自行百度下,笔者在这里只是测试问题所在,并未对此方法进行操作)
   步骤3:重新运行程序即可