如何在Python中解压缩.rar文件?

问题描述

我在用Python解压缩.rar文件时遇到问题。我正在将MacOS与Anaconda Navigator和Spyder IDE一起使用。 我已经安装了unrarpyunpackpy7zrrarfilepatool软件包。但是,当我运行以下代码时:

import zipfile

import numpy as np
import pandas as pd
from rarfile import RarFile
import patoolib
from pyunpack import Archive

# Archive('aaa.rar').extractall(".")
patoolib.extract_archive('aaa.rar')

我收到错误消息:

PatoolError: Could not find an executable program to extract format rar; candidates are (rar,unrar,7z),

File "/opt/anaconda3/lib/python3.7/site-packages/patoolib/__init__.py",line 684,in extract_archive
    return _extract_archive(archive,verbosity=verbosity,interactive=interactive,outdir=outdir,program=program)

  File "/opt/anaconda3/lib/python3.7/site-packages/patoolib/__init__.py",line 470,in _extract_archive
    program = find_archive_program(format,'extract',line 336,in find_archive_program
    raise util.PatoolError("Could not find an executable program to %s format %s; candidates are (%s)," % (command,format,",".join(programs)))

有人可以帮我吗?

解决方法

您可以使用rarfile模块

import rarfile

rf = rarfile.RarFile("myarchive.rar")
for f in rf.infolist():
    print(f.filename,f.file_size)
    if f.filename == "README":
        print(rf.read(f))
,

问题在于,Anaconda在Anaconda环境中找不到unrar(以及您在本地安装的其他程序)。解决方案是将它们安装在该环境中。


在您的Anaconda环境中,

conda install unrar

将使unrar可用,并使依赖它的Python包(如patoolib)起作用。


Conda还提供了conda package来处理.rar文件,可以将其安装

conda install -c conda-forge 7zip

有关Conda环境的更多信息,请参见here。他们特别指出,Conda环境的好处之一是它“管理非Python依赖项(R,Perl,任意可执行文件)。”,其中unrar是任意可执行文件。