我有一个包含2个文件的RAR存档,我只想提取一个。我在另一个答案中发现我可以使用rarfile
包,根据documentation包含extract
函数。但是,当我尝试运行脚本时,我会收到FileNotFoundError: [WinError 2]
和以下信息:During handling of the above exception, another exception occurred
:... rarfile.RarCannotExec: Unrar not installed? (rarfile.UNRAR_TOOL='unrar')
。
从我能找到的信息中,我看到它可能与PATH中缺少Unrar.exe
可执行文件有关,我试图添加它,但没有任何改变。另一个建议是将rarfile.UNRAR_TOOL='unrar'
添加到脚本中,作为配置包行为的一种方法,同样错误。
这是我的MWE,在Python 3.5.3中编写和测试:
from rarfile import RarFile
with RarFile('Test.rar') as file:
file.extract(file.namelist()[0])
正在正确打开文件,因为file.namelist()
会返回存档的内容。
提前致谢!
答案 0 :(得分:1)
根据您的评论进行更新:
我设法使用以下代码解压缩一个文件
from rarfile import RarFile
RarFile.UNRAR_TOOL='C:\\full\\path\\to\\UnRARDLL.exe'
with RarFile('test.rar') as file:
file.extract(file.namelist()[0])
下载UnRARDLL.exe并提供RarFile.UNRAR_TOOL
的正确完整路径。
您可能想要使用patool
import patoolib
patoolib.extract_archive("Test.rar", outdir="/some/dir")
适用于windows
和linux
,无需额外的软件
要安装使用:pip install patool
答案 1 :(得分:1)
如果RAR文件使用压缩,则必须以某种方式使用unrar(或基于unrar源代码的内容)。如果没有使用压缩,rarfile
可以为您完成所有操作。
Pedro Lobito的解决方案必须奏效。如果你得到FileNotFoundError
,我建议你再次检查你的文件名和路径。在您的问题中,您说:rarfile.UNRAR_TOOL='unrar'
,但rarfile
的大小写必须为RarFile
,如上所示佩德罗。两者都是正确的代码,但它们有不同的含义。也可以尝试使用完整路径,不要忘记.exe。