Python自動(dòng)化文件處理之如何批量壓縮和解壓文件
1.準(zhǔn)備工作
在開(kāi)始之前得先裝個(gè)"zipfile"模塊,不過(guò)這玩意是Python內(nèi)置的,不用額外安裝。它就是咱們今天的主角,負(fù)責(zé)文件壓縮解壓的全部操作。
import zipfile import os from pathlib import Path
2.批量壓縮文件
壓縮文件說(shuō)復(fù)雜也不復(fù)雜,說(shuō)簡(jiǎn)單也不簡(jiǎn)單。咱們寫個(gè)函數(shù),把指定文件夾里的文件都打包成zip:
def batch\_zip\_files(folder\_path, zip\_name):
# 創(chuàng)建一個(gè)zip文件
with zipfile.ZipFile(zip\_name, 'w') as zip\_file:
# 遍歷文件夾
for root, dirs, files in os.walk(folder\_path):
for file in files:file\_path = os.path.join(root, file)
# 把文件添加到zip中
zip\_file.write(file\_path, os.path.relpath(file\_path, folder\_path))
\# 使用方法
batch\_zip\_files('要壓縮的文件夾', '壓縮包名稱.zip')
溫馨提示:壓縮前最好檢查下磁盤空間夠不夠
3.批量解壓文件
解壓比壓縮還簡(jiǎn)單,寫個(gè)函數(shù)輕松搞定一堆zip文件:
def batch\_unzip\_files(zip\_folder, extract\_folder):
# 獲取所有zip文件
zip\_files = Path(zip\_folder).glob('\*.zip')
for zip\_path in zip\_files:
with zipfile.ZipFile(zip\_path, 'r') as zip\_file:
# 解壓到指定目錄
zip\_file.extractall(path=os.path.join(extract\_folder, zip\_path.stem))
\# 使用方法
batch\_unzip\_files('存放zip的文件夾', '解壓目標(biāo)文件夾')
4.加點(diǎn)高級(jí)功能
咱們還能給壓縮文件加個(gè)密碼,防止文件被隨便看到:
def secure\_zip\_files(folder\_path, zip\_name, password):
with zipfile.ZipFile(zip\_name, 'w', zipfile.ZIP\_DEFLATED) as zip\_file:
for root, dirs, files in os.walk(folder\_path):
for file in files:
file\_path = os.path.join(root, file)
zip\_file.write(file\_path,os.path.relpath(file\_path, folder\_path),pwd=password.encode())
\# 使用方法
secure\_zip\_files('要壓縮的文件夾', '加密壓縮包.zip', '你的密碼')
解壓帶密碼的zip文件也很容易:
def extract\_secure\_zip(zip\_path, extract\_folder, password):
with zipfile.ZipFile(zip\_path, 'r') as zip\_file:
zip\_file.extractall(
path=extract\_folder,
pwd=password.encode())
\# 使用方法
extract\_secure\_zip('加密壓縮包.zip', '解壓目標(biāo)文件夾', '你的密碼')
5.實(shí)用小貼士
寫代碼的時(shí)候記得加上錯(cuò)誤處理,要不遇到問(wèn)題程序就崩潰了:
def safe\_zip\_files(folder\_path, zip\_name):
try:with zipfile.ZipFile(zip\_name, 'w') as zip\_file:
for root, dirs, files in os.walk(folder\_path):
for file in files:
try:file\_path = os.path.join(root, file)zip\_file.write(file\_path)except Exception as e:
print(f'壓縮{file}失?。簕str(e)}')except Exception as e:
print(f'創(chuàng)建zip文件失?。簕str(e)}')
完整代碼示例:
import zipfile
import os
from pathlib import Path
def batch\_zip\_files(folder\_path, zip\_name):
with zipfile.ZipFile(zip\_name, 'w') as zip\_file:
for root, dirs, files in os.walk(folder\_path):
for file in files:file\_path = os.path.join(root, file)
zip\_file.write(file\_path, os.path.relpath(file\_path, folder\_path))
def batch\_unzip\_files(zip\_folder, extract\_folder):
zip\_files = Path(zip\_folder).glob('\*.zip')
for zip\_path in zip\_files:
with zipfile.ZipFile(zip\_path, 'r') as zip\_file:
zip\_file.extractall(path=os.path.join(extract\_folder, zip\_path.stem))
def secure\_zip\_files(folder\_path, zip\_name, password):
with zipfile.ZipFile(zip\_name, 'w', zipfile.ZIP\_DEFLATED) as zip\_file:
for root, dirs, files in os.walk(folder\_path):
for file in files:file\_path = os.path.join(root, file)
zip\_file.write(file\_path,os.path.relpath(file\_path, folder\_path),pwd=password.encode())
def extract\_secure\_zip(zip\_path, extract\_folder, password):
with zipfile.ZipFile(zip\_path, 'r') as zip\_file:
zip\_file.extractall(
path=extract\_folder,
pwd=password.encode())
\# 測(cè)試代碼
folder\_to\_zip = '要壓縮的文件夾'
zip\_file\_name = '壓縮包.zip'
extract\_folder = '解壓目標(biāo)文件夾'
password = '你的密碼'
batch\_zip\_files(folder\_to\_zip, zip\_file\_name)
batch\_unzip\_files(os.path.dirname(zip\_file\_name), extract\_folder)
secure\_zip\_files(folder\_to\_zip, 'secure\_' + zip\_file\_name, password)
extract\_secure\_zip('secure\_' + zip\_file\_name, extract\_folder, password)
把這段代碼復(fù)制到你的編輯器里,改下文件路徑就能用啦!記得創(chuàng)建好相關(guān)文件夾,不然代碼會(huì)報(bào)錯(cuò)。
到此這篇關(guān)于Python自動(dòng)化文件處理之如何批量壓縮和解壓文件的文章就介紹到這了,更多相關(guān)Python壓縮和解壓文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python滲透測(cè)試入門之Scapy庫(kù)的使用詳解
Scapy?是一個(gè)用來(lái)解析底層網(wǎng)絡(luò)數(shù)據(jù)包的Python模塊和交互式程序,該程序?qū)Φ讓影幚磉M(jìn)行了抽象打包,使得對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的處理非常簡(jiǎn)便。本文就來(lái)聊聊它的具體使用,希望對(duì)大家有所幫助2023-03-03
Python基于Socket實(shí)現(xiàn)簡(jiǎn)易多人聊天室的示例代碼
這篇文章主要介紹了Python基于Socket實(shí)現(xiàn)簡(jiǎn)易多人聊天室的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python?matplotlib繪圖時(shí)指定圖像大小及放大圖像詳解
Matplotlib是一個(gè)面向?qū)ο蟮睦L圖庫(kù),我們繪制的圖像中,每條曲線,每個(gè)邊框等等都對(duì)應(yīng)一個(gè)對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Python?matplotlib繪圖時(shí)指定圖像大小及放大圖像的相關(guān)資料,需要的朋友可以參考下2022-05-05
Python獲取數(shù)據(jù)庫(kù)數(shù)據(jù)并保存在excel表格中的方法
今天小編就為大家分享一篇Python獲取數(shù)據(jù)庫(kù)數(shù)據(jù)并保存在excel表格中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python實(shí)現(xiàn)識(shí)別手寫數(shù)字大綱
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)識(shí)別手寫數(shù)字的大綱,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
基于Python批量鑲嵌拼接遙感影像/柵格數(shù)據(jù)(示例代碼)
這篇文章主要介紹了基于Python批量鑲嵌拼接遙感影像/柵格數(shù)據(jù),使用時(shí)直接修改Mosaic_GDAL函數(shù)的入?yún)⒕托辛?選擇數(shù)據(jù)存放的路徑會(huì)自動(dòng)拼接,命名也會(huì)自己設(shè)置無(wú)需額外修改,需要的朋友可以參考下2023-10-10
django基礎(chǔ)學(xué)習(xí)之send_mail功能
這篇文章主要給大家介紹了關(guān)于django基礎(chǔ)學(xué)習(xí)之send_mail功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
python辦公自動(dòng)化(Excel)的實(shí)例教程
使用Excel自動(dòng)化處理,將會(huì)用到Python第三方庫(kù),所以我們需要提前通過(guò)來(lái)進(jìn)行安裝,下面這篇文章主要給大家介紹了關(guān)于python辦公自動(dòng)化(Excel)的相關(guān)資料,需要的朋友可以參考下2022-11-11

