无法使用 rarfile 模块提取 RAR 存档

问题描述 投票:0回答:5

我一直在尝试制作一个提取 *.rar 文件的脚本,但收到错误。我一直在努力理解该模块的文档,但无济于事(我是编程新手,所以有时会迷失在所有文档中)。

这是我的代码的相关部分,以及收到的错误。

我的代码片段:

import rarfile
rarpath='/home/maze/Desktop/test.rar'

def unrar(file):
    rf=rarfile.RarFile(file)
    rf.rarfile.extract_all()

unrar(rarpath)

收到错误:

  File "unrarer.py", line 26, in unrar
    rf.rarfile.extract_all()
AttributeError: 'str' object has no attribute 'extract_all'

我已经使用

rarfile
安装了
unrar
2.8和
pip
0.3(请注意是否需要后者)。

预先感谢您帮助纠正我的功能或帮助理解包的文档。

python rar
5个回答
2
投票

对 RAR 文件的支持总体来说很差,这种体验是正常的。

为了让

rarfile
Python 模块正常工作,您还必须安装支持的 RAR 文件提取工具。 您仅有的两个选择是
bsdtar
unrar
。 不要用 Pip 安装这些,你必须用你的 Linux 包管理器安装它们(或者你自己安装它们,如果你认为计算机的时间比你的时间更有价值)。 例如,在基于 Debian 的系统(包括 Ubuntu)上运行,

sudo apt install bsdtar

或者,

sudo apt install unrar

请注意,bsdtar 对 RAR 文件的支持程度与 Unrar 不同。 一些较新的 RAR 文件无法使用 bsdtar 解压。

那么你的代码应该如下所示:

import rarfile

def unrar(file):
    rf = rarfile.RarFile(file)
    rf.extract_all()

unrar('/home/maze/Desktop/test.rar')

请注意使用

rf.extract_all()
,而不是
rf.rarfile.extract_all()

如果您只是做

extract_all
那么就不需要使用
rarfile
模块。 您可以只使用
subprocess
模块:

import subprocess
path = '/path/to/archive.rar'
subprocess.check_call(['unrar', 'x', path])

无论如何,

rarfile
模块基本上只不过是
subprocess
的包装器。

当然,如果您有选择,我建议您将存档迁移到更便携且支持更好的存档格式。


1
投票

如果你在 Windows 中,它对我有用。您需要前往 https://www.rarlab.com/rar_add.htm 下载 UnRAR for Windows - Command line freeware Windows UnRAR,执行它,将其解压到文件夹中,并在导入 rarfile 后在代码中添加可执行路径:

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

0
投票

rf.rarfile
是文件的名称,您可以通过打印其值来查看。删除它并查看
help(rarfile.RarFile)
寻找您想要的方法。

import rarfile
rarpath='/home/maze/Desktop/test.rar'

def unrar(file):
    rf=rarfile.RarFile(file)
    rf.extractall()

unrar(rarpath)

0
投票

试试这个

import fnmatch
from rarfile import RarFile

path = r'C:\Users\byqpz\Desktop\movies\rars'
destinationPath = r'C:\Users\byqpz\Desktop\movies\destination'

for root, dirs, files in os.walk(path):
    for filename in fnmatch.filter(files, '*.rar'):
        fullPath = os.path.join(root, filename)
        RarFile(fullPath).extract(destinationPath)

0
投票

我也有同样的问题。

rarfile
使用
unrar
库依赖项。它能够解压缩大多数 .rar 文件,但不能解压缩全部。因此,安装
unrar
的选项在某些情况下可以起作用。

sudo apt-get install unrar

否则您可以下载

rar
库,但它不是免费的。 @tiago-gomes 建议安装用户版本的
rar
,但没人能保证它是否安全可靠:https://www.rarlab.com/rar_add.htm

您可以使用试用版作为临时解决方案或仅购买许可证:https://www.rarlab.com/download.htm 然后在您的 Python 代码中添加一个指向 archiver 的链接:

rarfile.UNRAR_TOOL=os.path.join("<path_to_unrar_folder>", "unrar")
© www.soinside.com 2019 - 2024. All rights reserved.