Python 怒解 RAR

  发布时间:2025-11-05 08:34:46   作者:玩站小弟   我要评论
本文转载自微信公众号「Python七号」,作者somenzz。转载本文请联系Python七号公众号。MacOS 可以直接解压 zip 文件,但 rar 文件却需要下载软件,于是我用了解优,过了段时间提 。

本文转载自微信公众号「Python七号」,怒解作者somenzz。怒解转载本文请联系Python七号公众号。怒解

MacOS 可以直接解压 zip 文件,怒解但 rar 文件却需要下载软件,怒解于是怒解我用了解优,过了段时间提示我需要付费才能用。怒解

我按耐不住,怒解这么简单的怒解需求,你让我付费,怒解我大 Python 是怒解吃素的嘛,一顿操作,怒解5 分钟实现怒解 RAR 文件,怒解以下是怒解详细方法:

1、下载源码,怒解编译 lib

从这里下载源码 https://www.rarlab.com/rar/unrarsrc-6.0.7.tar.gz

下载后,进入 unrar 目录,执行 make lib 编译,编译完成后,会在 unrar 目录会出现一个 libunrar.so 的动态链接库文件,企商汇记录这个 libunrar.so 路径。

2、编写代码,怒解 RAR

这里需要先设置下环境变量 UNRAR_LIB_PATH,设置成上步我们生成 libunrar.so 的路径,然后再导入 unrar 的 rarfile 模块时,UNRAR_LIB_PATH 的值就不是 None 了。

使用 unrar 前,请先 pip install unrar 一下。

import os os.environ.setdefault("UNRAR_LIB_PATH","/Users/aaron/Downloads/unsplash/unrar/libunrar.so") from unrar import rarfile target_path = /Users/aaron/Downloads/unsplash rf = rarfile.RarFile("/Users/aaron/Downloads/unsplash/python自动化运维.rar", mode=r) # mode的值只能为r rf_list = rf.namelist() # 得到压缩包里所有的文件 print(rar文件内容:) for file in rf_list:     print(file) rf.extractall(target_path) print("解压完成") 

3、让它更通用

上述代码虽然能用,但每次使用需要复制路径和文件名,不方便,这里我们把它做成一个命令行工具,代码修改如下:

#!/Users/aaron/py38env/bin/python3 # -*- coding: utf-8 -*- import os os.environ.setdefault("UNRAR_LIB_PATH","/Users/aaron/Downloads/unsplash/unrar/libunrar.so") import sys from somedecorators import timeit from unrar import rarfile @timeit() def decompress(rar_file):     rf = rarfile.RarFile(rar_file, mode=r) # mode的值只能为r     rf_list = rf.namelist() # 得到压缩包里所有的文件     for file in rf_list:         print(file)     rf.extractall() if __name__ == __main__:     decompress(sys.argv[1]) 

文件第一行,指定了编译器为 #!/Users/aaron/py38env/bin/python3,这样在命令行执行时就不需要再敲 python 了。服务器托管

函数上面使用了自己写的装饰器 somedecorators.timeit,只是为了统计时间,你可以 pip install somedecorators 来使用。

将上述代码保存为 unrarfile,然后复制到 /Users/aaron/py38env/bin/ 目录,不放这个目录也行,只要放在 $PATH 目录就可以在任意路径下调用。先加上用户可执行权限,再使用:

chmod u+x /Users/aaron/py38env/bin/unrarfile 

然后随便找个 rar 文件,就可以执行 unrarfile rar文件名 进行解压了:

(py38env) ➜  tmp unrarfile myCeleryProj.rar  myCeleryProj/.app.py.un~ myCeleryProj/app.py myCeleryProj/settings.py myCeleryProj/tasks.py myCeleryProj/__init__.py myCeleryProj/__pycache__/celery.cpython-36.pyc myCeleryProj/__pycache__/celeryconfig.cpython-36.pyc myCeleryProj/__pycache__/tasks.cpython-36.pyc myCeleryProj/__pycache__/__init__.cpython-36.pyc myCeleryProj/__pycache__ myCeleryProj decompress cost 0.0070 seconds (py38env) ➜  tmp  

是不是很方便?

最后的话

很多问题,只要会重复遇到,就要想办法彻底解决,否则,在某个未知时刻,这个问题还会出来烦人,Python 就是解决这类重复问题的利器。

  • Tag:

相关文章

  • 学习如何以dpi大小设置教程(让你的设计更加精确和专业化)

    摘要:随着科技的不断进步和设计行业的发展,人们对于图像和设计的要求也越来越高。而dpidotsperinch,每英寸点数)的大小设置对于图像的质量和打印效果起着关键性的作用。本文将为大...
    2025-11-05
  • 如何在 Linux 上手动安装 Java

    手动安装可以让用户更好的控制 Java 运行时环境。使用 Linux 发行版的软件包管理工具来安装 Java 软件包是很容易的。然而,有时你需要手动安装 Java。这对基于 Java 的应用服务器如
    2025-11-05
  • 用 SwiftUI 实现 3D Scroll 效果

    我们预览下今天要实现的 3D scroll 效果。学完本教程后,你就可以在你的 App 中把这种 3D 效果加入任何自定义的 SwiftUI 视图。下面我们来开始本教程的学习。入门首先,创建一个新的
    2025-11-05
  • Python中最常用的五种线程锁,你会用吗?

    前言本文将继续围绕 threading 模块讲解,基本上是纯理论偏多。对于日常开发者来讲很少会使用到本文的内容,但是对框架作者等是必备知识,同时也是高频的面试常见问题。官方文档(https://doc
    2025-11-05
  • 戴尔电脑开机43错误(探究戴尔电脑开机43错误的根源,提供解决方案)

    摘要:随着电脑的普及和使用,我们经常会遇到各种各样的问题。其中,戴尔电脑开机43错误是一个比较常见的问题。当我们遇到这个错误时,我们应该知道如何解决它,并了解它的根源,以避免类似问题的再...
    2025-11-05
  • 常用的分布式事务都有哪些?我该用哪个?

    本文转载自微信公众号「小姐姐味道」,作者小姐姐养的狗 。转载本文请联系小姐姐味道公众号。分布式的CAP理论应该是人尽皆知了,它描述了一致性(C)、可用性(A)、分区容错性(P)的一系列权衡。很多时候,
    2025-11-05

最新评论