我一直在尝试制作一个提取 *.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(请注意是否需要后者)。
预先感谢您帮助纠正我的功能或帮助理解包的文档。
对 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
的包装器。
当然,如果您有选择,我建议您将存档迁移到更便携且支持更好的存档格式。
如果你在 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"
rf.rarfile
是文件的名称,您可以通过打印其值来查看。删除它并查看 help(rarfile.RarFile)
寻找您想要的方法。
import rarfile
rarpath='/home/maze/Desktop/test.rar'
def unrar(file):
rf=rarfile.RarFile(file)
rf.extractall()
unrar(rarpath)
试试这个
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)
我也有同样的问题。
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")