Python自動(dòng)化解壓多種格式的壓縮文件(支持.zip/.rar/.7z格式)
1. 使用場(chǎng)景
實(shí)現(xiàn)自動(dòng)化解壓多種格式的壓縮文件,包括.zip、.rar和.7z格式。
2. 準(zhǔn)備WinRAR壓縮工具
從官網(wǎng)下載并安裝WinRAR
記錄WinRAR.exe文件路徑(默認(rèn)安裝位置如下)
C:\Program Files\WinRAR\WinRAR.exe
安裝示意圖:

3.準(zhǔn)備測(cè)試文件
1.將包含文件的本地文件夾分別壓縮為三種格式:
- TEST2ZIP.7z
- TEST2ZIP.rar
- TEST2ZIP.zip
2.創(chuàng)建目標(biāo)文件夾TEST1RAR用于存放解壓文件

4. 基礎(chǔ)實(shí)現(xiàn)代碼
示例代碼如下
unpack_test.py
import subprocess
import os
def unpack(filepath, target_folder):
# 獲取文件目錄和名稱
dir_folder = os.path.dirname(filepath)
file_name_pre = os.path.splitext(os.path.basename(filepath))[0]
print("當(dāng)前目錄:", dir_folder)
print("文件名:", file_name_pre)
# 配置WinRAR命令
command = [
'C:\\Program Files\\WinRAR\\WinRAR.exe',
'x', # 解壓保留目錄結(jié)構(gòu)
os.path.abspath(filepath),
target_folder.rstrip('\\') + '\\',
'-o+', # 覆蓋已有文件
'-y' # 自動(dòng)確認(rèn)
]
print("執(zhí)行命令:", " ".join(command))
result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
return target_folder
if __name__ == '__main__':
# 測(cè)試配置(可切換不同格式)
file_pack = r'D:\重載\TEST2ZIP.zip'
# file_pack = r'D:\重載\TEST2ZIP.7z'
# file_pack = r'D:\重載\TEST2ZIP.rar'
target_folder = r'D:\重載\TEST1RAR'
unpack(file_pack, target_folder)
5. 操作演示
1.在unpack_test.py目錄打開(kāi)CMD


2. 執(zhí)行解壓命令
py unpack_test.py
執(zhí)行后輸出如下

3. 檢查解壓結(jié)果

文件夾已存在,打開(kāi)可查看打包前的文件夾內(nèi)容

6.完整實(shí)現(xiàn)代碼
示例代碼如下
unpack_test.py
# 所需引入的庫(kù)
import subprocess
import os
# 解壓通用函數(shù)入口
def unpack(filepath, target_folder):
# 獲取文件所在目錄
dir_folder = os.path.dirname(filepath)
print("dir_folder----> ",dir_folder)
# # 獲取文件名(包含后綴,如test1.rar、test2.zip、test3.7z)
# file_name_all = os.path.basename(filepath)
# print("file_name_all----> ",file_name_all)
# # 將文件名和后綴分開(kāi),獲取分割后的數(shù)組
# file_name_all_list = os.path.splitext(file_name_all)
# print("file_name_all_list----> ",file_name_all_list)
# # 獲取文件名(不包含后綴,如test1)
# file_name_pre = file_name_all_list[0]
# 以上注釋代碼的整合 目的為了獲取壓縮包文件名(不帶后綴)
file_name_pre = os.path.splitext(os.path.basename(filepath))[0]
print("file_name_pre----> ",file_name_pre)
# 除了指定固定的輸出目錄,還可以使用文件名作為輸出目錄
# 將rar文件所在目錄和文件名(不包含后綴)拼接,成為文件夾的路徑,用于解壓后存儲(chǔ)文件
# target_folder = os.path.join(dir_folder, file_name_pre)
# print("target_folder----> ",target_folder)
# if not os.path.exists(target_folder):
# os.makedirs(target_folder)
# 本地winrar命令集成
command = [
# 本地WinRAR.exe文件路徑
'C:\\Program Files\\WinRAR\\WinRAR.exe',
# 解壓并保留完整目錄結(jié)構(gòu)
'x',
# 傳入源RAR文件的絕對(duì)路徑(引號(hào)包裹,防止路徑中有空格)
os.path.abspath(filepath),
# 目標(biāo)目錄(確保路徑以一個(gè)反斜杠結(jié)束,否則WinRAR會(huì)出錯(cuò)),如果該參數(shù)省略,則會(huì)默認(rèn)為當(dāng)前目錄
target_folder.rstrip('\\') + '\\',
# 覆蓋已存在的文件
'-o+',
# 將壓縮包名稱作為子目錄添加到目標(biāo)路徑中,如果添加該參數(shù),則壓縮包名稱會(huì)作為子目錄添加到目標(biāo)路徑中,產(chǎn)生兩層一樣的目錄
# '-ad',
# 后臺(tái)運(yùn)行
# '-ibck',
# 自動(dòng)確認(rèn)所有提示
'-y'
]
print("正在執(zhí)行命令:", " ".join(command))
# 運(yùn)行命令 subprocess本身會(huì)處理空格問(wèn)題
result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
# 返回目標(biāo)目錄
return target_folder
if __name__ == '__main__':
# 測(cè)試rar解壓
# file_pack = r'D:\重載\TEST2ZIP.rar'
# target_folder = r'D:\重載\TEST1RAR'
# 測(cè)試7z解壓
# file_pack = r'D:\重載\TEST2ZIP.7z'
# target_folder = r'D:\重載\TEST1RAR'
# 測(cè)試zip解壓
file_pack = r'D:\重載\TEST2ZIP.zip'
target_folder = r'D:\重載\TEST1RAR'
unpack(file_pack, target_folder)
到此這篇關(guān)于Python自動(dòng)化解壓多種格式的壓縮文件(支持.zip/.rar/.7z格式)的文章就介紹到這了,更多相關(guān)Python解壓文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3+selenium自動(dòng)化測(cè)試框架詳解
在本篇文章里小編給大家分享了關(guān)于python3+selenium自動(dòng)化測(cè)試框架的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-03-03
Python被遠(yuǎn)程主機(jī)強(qiáng)制關(guān)閉后自動(dòng)重新運(yùn)行進(jìn)程的示例
要實(shí)現(xiàn)Python程序在被遠(yuǎn)程主機(jī)強(qiáng)制關(guān)閉后能夠自動(dòng)重新運(yùn)行,我們可以采用幾種方法,但最直接且常用的方法之一是結(jié)合操作系統(tǒng)級(jí)的工具或腳本,這篇文章主要介紹了Python被遠(yuǎn)程主機(jī)強(qiáng)制關(guān)閉后怎么自動(dòng)重新運(yùn)行進(jìn)程,需要的朋友可以參考下2024-08-08
Pytorch 計(jì)算誤判率,計(jì)算準(zhǔn)確率,計(jì)算召回率的例子
今天小編就為大家分享一篇Pytorch 計(jì)算誤判率,計(jì)算準(zhǔn)確率,計(jì)算召回率的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
安裝Python后IDA中找不到Python模塊的問(wèn)題解決
有天在一臺(tái)新PC上安裝完IDA和Python之后,啟動(dòng)IDA報(bào)找不到Python模塊的問(wèn)題,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下2021-10-10
python開(kāi)發(fā)之for循環(huán)操作實(shí)例詳解
這篇文章主要介紹了python開(kāi)發(fā)之for循環(huán)操作,以實(shí)例形式較為詳細(xì)的分析了Python中for循環(huán)的具體使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Python創(chuàng)建普通菜單示例【基于win32ui模塊】
這篇文章主要介紹了Python創(chuàng)建普通菜單,結(jié)合實(shí)例形式分析了Python基于win32ui模塊創(chuàng)建普通菜單及添加菜單項(xiàng)的相關(guān)操作技巧,并附帶說(shuō)明了win32ui模塊的安裝命令,需要的朋友可以參考下2018-05-05
使用DataFrame實(shí)現(xiàn)兩表連接方式
這篇文章主要介紹了使用DataFrame實(shí)現(xiàn)兩表連接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
python 接口實(shí)現(xiàn) 供第三方調(diào)用的例子
今天小編就為大家分享一篇python 接口實(shí)現(xiàn) 供第三方調(diào)用的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08

