我一直在尝试制作一个提取 *.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
安装了 rarfile
2.8 和 unrar
0.3(请注意是否需要后者)。
预先感谢您帮助纠正我的功能或帮助理解包的文档。
最佳答案
对 RAR 文件的支持总体来说很差,这种体验是正常的。
为了使 rarfile
Python 模块正常工作,您还必须安装支持的 RAR 文件提取工具。您仅有的两个选择是 bsdtar
或 unrar
。不要使用 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/