无法使用rarfile modu提取RAR存档

2024-04-30 06:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试创建一个脚本来提取*.rar文件,但是收到了错误。我一直在努力理解这个模块的文档,但是没有用(我是个编程新手,所以有时会在所有文档中迷失方向)。在

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

我的代码片段:

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

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

unrar(rarpath)

收到错误:

^{pr2}$

我已经使用pip安装了rarfile2.8和unrar0.3(请注意,如果需要后者,请确定)。在

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


Tags: 模块文件代码文档import脚本编程错误
3条回答

对RAR文件的支持一般是相当差的,这是一个正常的经验。在

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

sudo apt install bsdtar

或者

^{pr2}$

请注意,bsdtar对RAR文件的支持级别与unrr不同。一些较新的RAR文件不会用bsdtar提取。在

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

import rarfile

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

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

注意使用rf.extract_all(),而不是{}。在

如果您只是在做extract_all,那么就不需要使用rarfile模块。您只需使用subprocess模块:

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

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

当然,如果您有选择的话,我建议您将归档文件迁移到一种更可移植、更受支持的归档格式。在

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

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

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

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

unrar(rarpath)

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

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

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

unrar(rarpath)

相关问题 更多 >