日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Python怒解RAR

[[410504]]

本文轉(zhuǎn)載自微信公眾號(hào)「Python七號(hào)」,作者somenzz。轉(zhuǎn)載本文請(qǐng)聯(lián)系Python七號(hào)公眾號(hào)。

MacOS 可以直接解壓 zip 文件,但 rar 文件卻需要下載軟件,于是我用了解優(yōu),過(guò)了段時(shí)間提示我需要付費(fèi)才能用。

我按耐不住,這么簡(jiǎn)單的需求,你讓我付費(fèi),我大 Python 是吃素的嘛,一頓操作,5 分鐘實(shí)現(xiàn)怒解 RAR 文件,以下是詳細(xì)方法:

1、下載源碼,編譯 lib

從這里下載源碼 https://www.rarlab.com/rar/unrarsrc-6.0.7.tar.gz

下載后,進(jìn)入 unrar 目錄,執(zhí)行 make lib 編譯,編譯完成后,會(huì)在 unrar 目錄會(huì)出現(xiàn)一個(gè) libunrar.so 的動(dòng)態(tài)鏈接庫(kù)文件,記錄這個(gè) libunrar.so 路徑。

2、編寫(xiě)代碼,怒解 RAR

這里需要先設(shè)置下環(huán)境變量 UNRAR_LIB_PATH,設(shè)置成上步我們生成 libunrar.so 的路徑,然后再導(dǎo)入 unrar 的 rarfile 模塊時(shí),UNRAR_LIB_PATH 的值就不是 None 了。

使用 unrar 前,請(qǐng)先 pip install unrar 一下。

 
 
 
  1. import os 
  2. os.environ.setdefault("UNRAR_LIB_PATH","/Users/aaron/Downloads/unsplash/unrar/libunrar.so") 
  3.  
  4.  
  5. from unrar import rarfile 
  6. target_path = '/Users/aaron/Downloads/unsplash' 
  7. rf = rarfile.RarFile("/Users/aaron/Downloads/unsplash/python自動(dòng)化運(yùn)維.rar", mode='r') # mode的值只能為'r' 
  8. rf_list = rf.namelist() # 得到壓縮包里所有的文件 
  9. print('rar文件內(nèi)容:') 
  10. for file in rf_list: 
  11.     print(file) 
  12.  
  13. rf.extractall(target_path) 
  14. print("解壓完成") 

3、讓它更通用

上述代碼雖然能用,但每次使用需要復(fù)制路徑和文件名,不方便,這里我們把它做成一個(gè)命令行工具,代碼修改如下:

 
 
 
  1. #!/Users/aaron/py38env/bin/python3 
  2. # -*- coding: utf-8 -*- 
  3.  
  4. import os 
  5. os.environ.setdefault("UNRAR_LIB_PATH","/Users/aaron/Downloads/unsplash/unrar/libunrar.so") 
  6. import sys 
  7. from somedecorators import timeit 
  8. from unrar import rarfile 
  9.  
  10. @timeit() 
  11. def decompress(rar_file): 
  12.     rf = rarfile.RarFile(rar_file, mode='r') # mode的值只能為'r' 
  13.     rf_list = rf.namelist() # 得到壓縮包里所有的文件 
  14.     for file in rf_list: 
  15.         print(file) 
  16.     rf.extractall() 
  17.  
  18. if __name__ == '__main__': 
  19.     decompress(sys.argv[1]) 

文件第一行,指定了編譯器為 #!/Users/aaron/py38env/bin/python3,這樣在命令行執(zhí)行時(shí)就不需要再敲 python 了。

函數(shù)上面使用了自己寫(xiě)的裝飾器 somedecorators.timeit,只是為了統(tǒng)計(jì)時(shí)間,你可以 pip install somedecorators 來(lái)使用。

將上述代碼保存為 unrarfile,然后復(fù)制到 /Users/aaron/py38env/bin/ 目錄,不放這個(gè)目錄也行,只要放在 $PATH 目錄就可以在任意路徑下調(diào)用。先加上用戶可執(zhí)行權(quán)限,再使用:

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

然后隨便找個(gè) rar 文件,就可以執(zhí)行 unrarfile rar文件名 進(jìn)行解壓了:

 
 
 
  1. (py38env)   tmp unrarfile myCeleryProj.rar  
  2. myCeleryProj/.app.py.un~ 
  3. myCeleryProj/app.py 
  4. myCeleryProj/settings.py 
  5. myCeleryProj/tasks.py 
  6. myCeleryProj/__init__.py 
  7. myCeleryProj/__pycache__/celery.cpython-36.pyc 
  8. myCeleryProj/__pycache__/celeryconfig.cpython-36.pyc 
  9. myCeleryProj/__pycache__/tasks.cpython-36.pyc 
  10. myCeleryProj/__pycache__/__init__.cpython-36.pyc 
  11. myCeleryProj/__pycache__ 
  12. myCeleryProj 
  13. decompress cost 0.0070 seconds 
  14. (py38env)   tmp  

是不是很方便?

最后的話

 

很多問(wèn)題,只要會(huì)重復(fù)遇到,就要想辦法徹底解決,否則,在某個(gè)未知時(shí)刻,這個(gè)問(wèn)題還會(huì)出來(lái)煩人,Python 就是解決這類(lèi)重復(fù)問(wèn)題的利器。

 


本文標(biāo)題:Python怒解RAR
網(wǎng)址分享:http://www.dlmjj.cn/article/djddgcd.html