杰瑞科技汇

Python rarfile 如何使用?

rarfile 是一个第三方库,它允许你在 Python 中像处理普通文件一样读取、创建和解压 RAR 档案,它本身是一个“外壳”,底层的解压工作需要依赖一个命令行工具,通常是 UnRAR

Python rarfile 如何使用?-图1
(图片来源网络,侵删)

安装 rarfile 和依赖

第一步:安装 rarfile

使用 pip 进行安装:

pip install rarfile

第二步:安装并配置 UnRAR 工具 (最关键的一步)

rarfile 必须调用系统中的 unrar 命令才能工作,你需要根据你的操作系统安装它。

对于 Windows:

  1. RARLAB 官网 下载 UnRAR for Windows
  2. 下载后解压,你会得到 UnRAR.exe 文件。
  3. 最重要的一步:将 UnRAR.exe 所在的目录添加到系统的 PATH 环境变量中,这样 Python 才能找到它。
    • 右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
    • 在“系统变量”中找到 Path,点击“编辑”。
    • 点击“新建”,然后将 UnRAR.exe 的完整路径(C:\Program Files\WinRAR)添加进去。
    • 重启命令提示符或你的 IDE。

对于 macOS (使用 Homebrew):

Python rarfile 如何使用?-图2
(图片来源网络,侵删)
brew install unrar

Homebrew 会自动处理好路径。

对于 Linux (Debian/Ubuntu):

sudo apt-get update
sudo apt-get install unrar

或者如果你的包管理器叫 unrar-free (一个开源实现):

sudo apt-get install unrar-free

基本用法

安装完成后,你就可以在 Python 中导入并使用 rarfile 了。

1 打开 RAR 文件

使用 rarfile.RarFile() 函数来打开一个 RAR 文件,它会返回一个类似文件对象的 RarFile 实例。

import rarfile
# 确保文件存在
rar_path = 'example.rar' 
try:
    # 以只读模式打开 RAR 文件
    with rarfile.RarFile(rar_path, 'r') as rf:
        print(f"成功打开 RAR 文件: {rar_path}")
        # 后续操作 rf 对象...
except rarfile.BadRarFile:
    print(f"错误: 文件 '{rar_path}' 不是有效的 RAR 文件或已损坏。")
except FileNotFoundError:
    print(f"错误: 文件 '{rar_path}' 未找到。")

2 列出 RAR 文件中的内容

使用 namelist() 方法可以获取 RAR 文件中所有文件的列表。

import rarfile
with rarfile.RarFile('example.rar', 'r') as rf:
    # 获取所有文件和文件夹的列表
    file_list = rf.namelist()
    print("RAR 文件内容列表:")
    for name in file_list:
        print(name)

输出示例:

RAR 文件内容列表:
docs/
docs/report.txt
images/
images/logo.png

3 检查特定文件是否存在

使用 getinfo() 方法可以获取单个文件的信息,如果文件不存在会抛出 KeyError

import rarfile
with rarfile.RarFile('example.rar', 'r') as rf:
    try:
        info = rf.getinfo('docs/report.txt')
        print(f"找到文件: {info.filename}")
        print(f"文件大小: {info.file_size} 字节")
        print(f"压缩后大小: {info.compress_size} 字节")
        print(f"最后修改时间: {info.date_time}")
    except KeyError:
        print("文件 'docs/report.txt' 不在 RAR 档案中。")

4 解压单个文件

使用 extract() 方法可以将指定的单个文件解压到当前目录或指定的目标目录。

import rarfile
# 解压到当前目录
with rarfile.RarFile('example.rar', 'r') as rf:
    try:
        rf.extract('images/logo.png')
        print("文件 'images/logo.png' 已解压到当前目录。")
    except KeyError:
        print("要解压的文件不存在。")
# 解压到指定目录
output_dir = 'unzipped_files'
with rarfile.RarFile('example.rar', 'r') as rf:
    rf.extract('images/logo.png', path=output_dir)
    print(f"文件 'images/logo.png' 已解压到目录 '{output_dir}'。")

5 解压整个 RAR 文件

使用 extractall() 方法可以一次性解压 RAR 文件中的所有内容。

import rarfile
import os
# 创建一个用于解压的目录
output_dir = 'all_unzipped_files'
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
with rarfile.RarFile('example.rar', 'r') as rf:
    rf.extractall(path=output_dir)
    print(f"所有文件已解压到目录 '{output_dir}'。")

高级用法

1 处理加密的 RAR 文件

RAR 文件设置了密码,你需要在打开 RarFile 时提供 pwd 参数。

import rarfile
password = b'my_secret_password'  # 密码必须是 bytes 类型
with rarfile.RarFile('encrypted.rar', 'r', pwd=password) as rf:
    file_list = rf.namelist()
    print("加密 RAR 文件内容列表:")
    for name in file_list:
        print(name)
    # 解压加密文件
    rf.extractall(path='decrypted_files')
    print("已解压加密文件到 'decrypted_files' 目录。")

注意:

  • 密码必须是 bytes 类型,如果你的密码是字符串,请使用 password.encode() 进行转换。
  • 如果密码错误,解压时会抛出 rarfile.BadRarFile 异常。

2 创建 RAR 文件

rarfile 库主要用于读取 RAR 文件,创建 RAR 文件的功能非常有限,通常不推荐使用,对于创建压缩文件,建议使用 Python 内置的 zipfile 库(用于创建 ZIP 文件)或调用 rar 命令行工具(如果已安装)。


常见问题与解决方案

Q1: rarfile.NeedFirstVolume 错误

原因: 你尝试打开的是一个分卷压缩包(part1.rar, part2.rar...),但你只提供了第一个文件。 解决方案: 确保所有分卷文件都在同一个目录下,然后只打开第一个文件(part1.rar)。rarfile 会自动找到其他分卷。

# 错误
# with rarfile.RarFile('data.part2.rar', 'r') as rf: ... 
# 正确
with rarfile.RarFile('data.part1.rar', 'r') as rf:
    rf.extractall('extracted_data')

Q2: rarfile.BadRarFile 错误

原因:

  1. 文件不是有效的 RAR 格式。
  2. 文件已损坏。
  3. 密码错误(对于加密文件)。
  4. UnRAR 工具未正确安装或不在 PATH 中。

解决方案:

  1. 用 WinRAR 或其他解压工具手动打开该文件,看是否能正常解压。
  2. 重新下载或获取一个完好的 RAR 文件。
  3. 检查密码是否正确,并确保以 bytes 类型传入。
  4. 再次确认 UnRAR (或 unrar) 是否已安装并添加到系统 PATH,可以在终端/命令行中直接输入 unrarUnRAR 来测试。

Q3: FileNotFoundError: [Errno 2] No such file or directory: 'unrar'

原因: Python 找不到底层的 unrar 命令行工具。 解决方案: 仔细按照 第一步:安装 rarfile 和依赖 中的说明,确保在你的操作系统上正确安装了 UnRAR 并配置了环境变量 PATH


功能 方法 说明
打开文件 rarfile.RarFile(filename, 'r') 必须在 with 语句中使用,确保文件正确关闭。
rf.namelist() 返回包含所有文件和目录路径的字符串列表。
获取文件信息 rf.getinfo(filename) 返回一个 RarInfo 对象,包含大小、时间等元数据。
解压单个文件 rf.extract(filename, path=None) path 参数指定解压目录,默认为当前目录。
解压全部文件 rf.extractall(path=None) path 参数指定解压目录,默认为当前目录。
处理密码 rarfile.RarFile(filename, 'r', pwd=password) pwd 必须是 bytes 类型。

rarfile 是一个功能强大且易于使用的库,是 Python 中处理 RAR 文件的绝佳选择,只要成功配置好 UnRAR 依赖,你就可以轻松地集成 RAR 文件处理功能到你的 Python 项目中。

分享:
扫描分享到社交APP
上一篇
下一篇