我一直在尝试创建一个提取* .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(请注意以后是否有必要)。
提前感谢任何纠正我的功能或帮助理解软件包文档的帮助。
答案 0 :(得分:1)
一般来说,对RAR文件的支持很差,这种体验与课程相同。
为了使rarfile
Python模块起作用,您还必须安装一个支持的工具来提取RAR文件。您唯一的两个选择是bsdtar
或unrar
。不要使用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"