[[410504]]

本文转载自微信公众号「Python七号」,作者somenzz。转载本文请联系Python七号公众号。
MacOS 可以直接解压 zip 文件,但 rar 文件却需要下载软件,于是我用了解优,过了段时间提示我需要付费才能用。
我按耐不住,这么简单的需求,你让我付费,我大 Python 是吃素的嘛,一顿操作,5 分钟实现怒解 RAR 文件,以下是详细方法:
从这里下载源码 https://www.rarlab.com/rar/unrarsrc-6.0.7.tar.gz
下载后,进入 unrar 目录,执行 make lib 编译,编译完成后,会在 unrar 目录会出现一个 libunrar.so 的动态链接库文件,记录这个 libunrar.so 路径。
这里需要先设置下环境变量 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("解压完成")
 
上述代码虽然能用,但每次使用需要复制路径和文件名,不方便,这里我们把它做成一个命令行工具,代码修改如下:
- #!/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 就是解决这类重复问题的利器。
                分享文章:Python怒解RAR
                
                分享URL:http://www.csdahua.cn/qtweb/news40/419940.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网