使用 Python 中的 rarfile 从 RAR 压缩包中提取单个文件

Extract single file from RAR archive with rarfile in Python

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

提前致谢!

根据 OP 评论更新:

我使用以下代码成功解压了一个文件

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

如果RAR文件使用压缩,你必须以某种方式使用unrar(或基于unrar源代码的东西)。如果不使用压缩,rarfile 可以为您完成。

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