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

标签 python rar

我一直在尝试制作一个提取 *.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'

我已经使用 pip 安装了 rarfile2.8 和 unrar0.3(请注意是否需要后者)。

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

最佳答案

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

为了使 rarfile Python 模块正常工作,您还必须安装支持的 RAR 文件提取工具。您仅有的两个选择是 bsdtarunrar。不要使用 Pip 安装这些,您必须使用 Linux 包管理器安装它们(或者自己安装,如果您认为计算机的时间比您的时间更有值(value))。例如,在基于 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 的包装器。

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

关于python - 无法使用 rarfile 模块提取 RAR 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40251033/

相关文章:

python - 如何解释Python中的timeit命令

python - 在 SciPy (Python) 中从适合的 PDF 生成随机样本

java - 通过Junrar解压rar文件然后删除压缩包

Android Rar, zip 库

ruby-on-rails - 能够处理 rar/tar/zip/7z 的 Ruby/rubyzip 替代方案?

java - android - 如何检查后台线程是否成功?

java - 在android中以编程方式解压缩具有阿拉伯名称的文件

python - 覆盖python中方法的内部函数

python - 函数: Returning min value in dictionary

python - 用 `$` 替换第一个字符的所有后续出现