使用Python中的rarfile从RAR存档中提取单个文件

时间:2017-04-20 18:51:51

标签: python extract rar

我有一个包含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()会返回存档的内容。

提前致谢!

2 个答案:

答案 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")

适用于windowslinux,无需额外的软件 要安装使用:pip install patool

答案 1 :(得分:1)

如果RAR文件使用压缩,则必须以某种方式使用unrar(或基于unrar源代码的内容)。如果没有使用压缩,rarfile可以为您完成所有操作。

Pedro Lobito的解决方案必须奏效。如果你得到FileNotFoundError,我建议你再次检查你的文件名和路径。在您的问题中,您说:rarfile.UNRAR_TOOL='unrar',但rarfile的大小写必须为RarFile,如上所示佩德罗。两者都是正确的代码,但它们有不同的含义。也可以尝试使用完整路径,不要忘记.exe。