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

时间:2016-10-25 22:53:06

标签: 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'

我使用rarfile安装了unrar 2.8和pip 0.3(请注意以后是否有必要)。

提前感谢任何纠正我的功能或帮助理解软件包文档的帮助。

5 个答案:

答案 0 :(得分:1)

一般来说,对RAR文件的支持很差,这种体验与课程相同。

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

sudo apt install bsdtar

或者,

sudo apt install unrar

请注意,bsdtar对Unrar的RAR文件没有相同级别的支持。一些较新的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 :(得分:0)

尝试使用rf.extractall()代替rf.rarfile.extract_all(),因为rf.rarfile是@tdelaney指出的文件名。

并将import unrar更改为from unrar import rarfile,因为您需要在unrar之上rarfile来打开/读取rar文件并将其提取到内存中

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

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

unrar(rarpath)

答案 2 :(得分: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)

答案 3 :(得分: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)

答案 4 :(得分:0)

如果您在Windows中,它对我有用。您需要转到https://www.rarlab.com/rar_add.htm下载Windows UnRAR-命令行免费软件Windows UnRAR,执行它,将其解压缩到一个文件夹中,并在导入rarfile后在代码中添加可执行路径:

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