Python提取/解压缩RAR文件错误

时间:2019-09-13 21:27:54

标签: python extract rar unrar

我正在尝试用Python脚本提取RAR文件。我发现只有两种可能的方法可以做到这一点:使用patoolib或使用rarfile。不幸的是,这两个选项都在我的代码中引发很多错误,而且我不知道如何解决此问题。

首先,我只尝试了patool和patoolib。错误发生后,我切换到rarfile和unrar。第一个似乎更容易,但是我不理解该错误。第二个问题需要对环境变量进行大量操作,因此我不确定是否做得正确。

import patoolib
patoolib.extract_archive("my_file.rar", outdir=r"C:\Users\User1\Desktop\Example_dir")

错误提示:

if verbosity >= 0:
TypeError: '>=' not supported between instances of 'str' and 'int'

我从here获得此选项。我知道此错误说明了有关字符串变量的内容,但我不知道如何解释它。

第二个选项是使用rarfile和unrar。

import patoolib
from unrar import rarfile
from pyunpack import Archive

rarfile.UNRAR_TOOL = r"C:\Program Files (x86)\UnrarDLL\x64\UnRAR64.dll"


rarpath = 'my_file.rar'
rf = rarfile.RarFile(rarpath)
rf.extractall()
rf.extractall(r"C:\Users\User1\Desktop\Example_dir")

此选项引发人为错误:

PatoolError('patool can not unpack\n' + str(p.stderr)) pyunpack.PatoolError: patool can not unpack patool error: error extracting G:\program\test.rar: could not find an executable program to extract format rar; candidates are (rar,unrar,7z),

此外,还有另一个错误:

RarCannotExec: Unrar not installed? (rarfile.UNRAR_TOOL='unrar')

rarfile documentation说,UNRAR_TOOL必须是unrar.exe的路径。我已经完成了“ pip install unrar”,我已经通过“ pip”从上面安装了所有库。基于this的答案,我已经下载了UnRARDLL(http://www.rarlab.com/rar/UnRARDLL.exe),但是我不知道应该将哪个.exe文件分配给UNRAR_TOOL。我已将环境路径作为UNRAR_LIB_PATH添加到C:\ Program Files(x86)\ UnrarDLL \ x64 \ UnRAR64.dll,但这没有帮助。

我只想通过Python脚本解压缩某些文件。越容易越好。你能告诉我我在做什么错吗?也许还有另一种方法来解压缩某些文件?

3 个答案:

答案 0 :(得分:0)

TypeError异常声明您正在尝试比较字符串和整数。如果对if verbosity >= 0:的引用正确,则意味着verbosity变量是一个字符串。
也许您之前设置的是verbosity = '1'而不是verbosity = 1

另一个错误就是说:could not find an executable program to extract format rar; candidates are (rar,unrar,7z)
该代码期望找到rarunrar7z(7zip)之一的可执行文件。如果安装了它们,则可能需要以某种方式告诉patoolib

rarfile.UNRAR_TOOL = r"C:\Program Files (x86)\UnrarDLL\x64\UnRAR64.dll"

看起来还不错,但如果不起作用,则可能必须遵循linked answer中的步骤并改为设置UNRAR_LIB_PATH环境变量。
这应该说明您如何在Windows上设置环境变量:https://helpdeskgeek.com/windows-10/add-windows-path-environment-variable/

答案 1 :(得分:0)

不久前,我找到了patoolib的主人source。现在我知道,patoolib.extract_archive函数的参数为​​:patoolib.extract_archive(archive, verbosity, outdir, program, format, compression)。我不知道verbosity在此功能中的作用。另外,我应该如何设置program?现在我有这样的东西:

import patoolib
patoolib.extract_archive(archive="my_file.rar", verbosity=0 ,outdir=or"C:\Users\User1\Desktop\Example_dir", program=r"C:\Program Files (x86)\UnrarDLL\x64\UnRAR64.dll)

错误提示:

SyntaxError: EOL while scanning string literal

答案 2 :(得分:0)

您需要转到https://www.rarlab.com/rar_add.htm下载Windows版UnRAR-命令行免费软件Windows UnRAR,将其解压缩到文件夹中并添加:

rarfile.UNRAR_TOOL = r"C:\YourPath\UnRAR.exe"

因为rarfile不在寻找.dll,而是在寻找可执行文件.exe