2024-10-27
前言
god,python现在还不支持原生压缩rar文件…为何。
依靠Python第三方库
rarfile
库专门用于处理rar型压缩包,这个库需要系统上安装 unrar
程序,在环境变量中能需要能找到它。
安装依赖包
- 安装
rarfile
:
pip install rarfile
# conda install rarfile
以下是GTP-4给出的回答
确保系统已安装 unrar
或 rar
(具体根据你的系统环境),这是rarfile
这个库的依赖,没有配置好运行该库将报错:
-
Windows:下载并安装 WinRAR 后,将其路径添加到系统环境变量。
-
Linux:使用包管理器安装:
sudo apt-get install unrar
- macOS:可以通过
brew
安装:
brew install unrar
笔者是直接使用python包管理器安装,也就是使用conda直接安装unrar,实测win11与macos 15都没问题,依赖都能搞定。
conda install unrar
据网友所说直接install rar可能出现报错,这里贴一下原帖地址以及解决方法,笔者撰写此文的时候并没有遇到。
https://zhuanlan.zhihu.com/p/611812344
第一步:
安装unrar模块,直接pip install unrar可能会找不到库,需要下载unrar library,也就是UnRAR.dll,下载地址为:http://www.rarlab.com/rar/UnRARDLL.exe ;
第二步:
将unrar安装路径添加到系统环境变量,64位操作系统的路径为C:\Program Files (x86)\UnrarDLL\x64,然后还需要将x64文件下的UnRAR64.lib和UnRAR64.dall重命名为unrar.lib和unrar.dall,因为unrar模块识别的文件是unrar.dll和unrar.lib;
示例代码
import rarfile
import os
def extract_rar_with_password(rar_file, output_dir, password):
try:
# 打开 RAR 文件
with rarfile.RarFile(rar_file) as rf:
# 确保输出目录存在
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 解压所有文件,使用密码
rf.extractall(path=output_dir, pwd=password)
print(f"成功解压到: {output_dir}")
except rarfile.BadRarFile:
print("错误:文件格式不正确或文件损坏。")
except rarfile.PasswordRequired:
print("错误:需要提供密码。")
except rarfile.RarWrongPassword:
print("错误:提供的密码不正确。")
except Exception as e:
print(f"发生错误:{e}")
# 示例调用
rar_file = "your_file.rar" # 替换为你的 RAR 文件路径
output_dir = "output_directory" # 替换为解压后的输出目录路径
password = "your_password" # 替换为正确的密码
extract_rar_with_password(rar_file, output_dir, password)
以上代码为ai生成,win11和macos均可以跑。但是测试过程中也发生了些问题,比如输入错误密码其实会报rarfile.BadRarFile
的错误;在macos上如果提供不存在的输出目录,解压程序还是会运行到底而且不会报错,然后系统磁盘大小是没有变化的。这些错误感觉十分奇葩,估计是rarfile年久失修的问题。
使用python间接输入命令行
使用os.system
函数可以直接执行系统的命令行。如果是windows系统,winrar软件在安装的时候,还会直接提供一个winrar.exe的可执行函数,我们可以使用命令行来直接调用它,如下所示:
import os
winrar_path = r'C:\"Program Files"\WinRAR\WinRAR.exe' # 一般是这个路径
psw = ''
rar_file_path = 'test.rar' # 需要解压的rar文件路径
os.system(f'{winrar_path} -y x -p{psw} "{rar_file_path}" *')
到这步其实和python没啥关系了,winrar的其他命令行操作,其官方文档也有介绍,这里就不展开。
[文章导入自 http://qzq-go.notion.site/12c49a7b4e758095a152f07d06cd67cc 访问原文获取高清图片]