Python 处理 RAR 文件指南
在 Python 中,由于 RAR 格式是专利格式,Python 的标准库(如 zipfile)并不支持直接解压 RAR 文件,要实现这一功能,你必须使用第三方库,并且通常需要你的操作系统中预装了 unrar 或 7-Zip 等外部命令行工具。
使用 rarfile 库(最推荐)
rarfile 是 Python 中处理 RAR 文件最常用的库,它本质上是一个封装器,通过调用系统中的 unrar 命令来完成工作。
安装步骤
-
第一步:安装 Python 库
在终端或命令行执行:pip install rarfile -
第二步:安装外部工具(至关重要)
你必须确保系统中安装了unrar命令行工具,否则程序会报错。- Windows: 下载 WinRAR 或单独的
unrar.exe,并将该程序所在的文件夹路径添加到系统的环境变量 (PATH) 中。 - macOS: 使用 Homebrew 安装:
brew install unrar - Linux: 使用包管理器安装:
sudo apt-get install unrar
- Windows: 下载 WinRAR 或单独的
代码示例
import rarfile# unrar 没有添加到环境变量,可以手动指定路径# rarfile.UNRAR_TOOL = r"C:Program FilesWinRARUnRAR.exe"rar_path = "example.rar"try: with rarfile.RarFile(rar_path) as rf: # 1. 列出压缩包内的所有文件 print("文件列表:", rf.namelist()) # 2. 查看压缩包信息 print("压缩包信息:", rf.infolist()) # 3. 解压所有文件到指定目录 rf.extractall(path="./output_folder") print("解压完成!")except Exception as e: print(f"处理失败: {e}")使用 patool 库(多格式通用)
如果你不仅要处理 RAR,还要处理 7z, ZIP, TAR 等多种格式,patool 是一个非常强大的选择,它是一个通用的解压缩管理工具。
安装步骤
- 执行安装命令:
pip install patool
代码示例
import patoolib
# 定义文件路径和目标目录
rar_file = "example.rar"
output_dir = "./extracted_data"
try:
# patool 会自动识别格式并调用相应的系统工具
patoolib.extract_archive(rar_file, outdir=output_dir)
print("解压成功!")
except Exception as e:
print(f"解压出错: {e}")
使用 subprocess 直接调用系统命令
如果你不想安装任何额外的 Python 库,且确定系统中已经安装了 unrar 或 7z 命令,可以直接使用 Python 内置的 subprocess 模块。
代码示例
import subprocess
rar_file = "example.rar"
output_dir = "./output"
# 使用 unrar 命令进行解压
# 'x' 参数表示带完整路径解压
try:
subprocess.run(["unrar", "x", rar_file, output_dir], check=True)
print("通过系统命令解压成功")
except subprocess.CalledProcessError as e:
print(f"解压失败,错误码: {e.returncode}")
except FileNotFoundError:
print("错误:未在系统中找到 unrar 命令,请先安装 unrar。")
总结与建议
| 方法 |
优点 | 缺点 | 适用场景 |
|---|---|---|---|
rarfile | 功能最细致,支持查看文件信息、单个提取 | 必须配置 unrar 环境 | 最专业的 RAR 处理需求 |
patool | 代码极其简单,支持多种压缩格式 | 依赖较多,底层逻辑较黑盒 | 需要处理多种不同格式时 |
subprocess | 无需安装 Python 第三方库 | 无法通过 Python 对象操作文件内容 | 简单的自动化脚本 |
核心提示:无论选择哪种 Python 方案,安装系统级的 unrar 或 7-Zip 工具 始终是成功的先决条件。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/489754.html



