本文转载自微信公众号《Python7号》,作者somenzz。转载本文请联系Python七号公众号。macOS可以直接解压zip文件,但是rar文件需要下载软件,所以用了捷优,过一会提示需要付费才能使用。受不了了,这么简单的需求你让我付费,我是吃素的,我一个操作5分钟搞定RAR文件,下面是详细方法:1.下载源码和从这里编译lib下载源码https://www.rarlab.com/rar/unrarsrc-6.0.7.ta??r.gz下载后进入unrar目录,执行makelib编译。编译完成后,unrar目录下会出现一个libunrar.so动态链接库文件,记录下libunrar.so路径。2.编写解开RAR的代码。这里需要设置环境变量UNRAR_LIB_PATH为我们上一步生成libunrar.so的路径,然后在导入unrar的rarfile模块时,UNRAR_LIB_PATH的值不为None。在使用unrar之前,请先运行pipinstallunrar。importosos.environ.setdefault("UNRAR_LIB_PATH","/Users/aaron/Downloads/unsplash/unrar/libunrar.so")fromunrarimimportrarfiletarget_path='/Users/aaron/Downloads/unsplash'rf=rarfile.RarFile("/Users/aaron/Downloads/unsplash/python自动化运维.rar",mode='r')#mode的值只能是'r'rf_list=rf.namelist()#获取压缩包中的所有文件打印('rarfilecontent:')forfileinrf_list:print(file)rf.extractall(target_path)print("解压完成")3.让它更通用上面的代码虽然可以用,但是不方便复制路径和文件每次使用它时的名称。这里我们把它做成命令行工具,修改代码如下:#!/Users/aaron/py38env/bin/python3#-*-coding:utf-8-*-importosos.environ.setdefault("UNRAR_LIB_PATH","/Users/aaron/Downloads/unsplash/unrar/libunrar.so")importsysfromsomedecoratorsimporttimeitfromunrarimportrarfile@timeit()defdecompress(rar_file):rf=rarfile.RarFile(rar_file,mode='r')#modecanonlybe'r'rf_list=rf.namelist()#获取压缩包中的所有文件forfileinrf_list:print(file)rf.extractall()if__name__=='__main__':decompress(sys.argv[1])文件第一行指定编译器作为#!/Users/aaron/py38env/bin/python3,这样在命令行执行的时候就不用敲python了。函数使用了自己写的装饰器somedecorators.timeit,只是为了计时,可以pipinstallsomedecorators来使用。将以上代码保存为unrar文件,然后复制到/Users/aaron/py38env/bin/目录下。不放这个目录也没关系,只要放在$PATH目录下,在任何路径下都可以调用。先添加用户的可执行权限,然后使用:chmodu+x/Users/aaron/py38env/bin/unrarfile然后找到任意一个rar文件,可以执行unrarfilerar文件名解压:(py38env)?tmpunrarfilemyCeleryProj.rarmyCeleryProj/。app.py.un~myCeleryProj/app.pymyCeleryProj/settings.pymyCeleryProj/tasks.pymyCeleryProj/__init__.pymyCeleryProj/__pycache__/celery.cpython-36.pycmyCeleryProj/__pycache__/celeryconfig.cpython-36.pycmyCeleryProj/__pycache__/ta-36。pycmyCeleryProj/__pycache__/__init__.cpython-36.pycmyCeleryProj/__pycache__myCeleryProjdecompresscost0.0070seconds(py38env)?tmp方便吗?最后,问题很多。只要反复遇到,就必须想办法彻底解决。在不知不觉中,这个问题会很烦人,而Python是解决这种重复性问题的有力工具。
