python解壓縮文件或文件夾兩種常見方式(附代碼)
前言
在日常開發(fā)或數(shù)據(jù)處理工作中,我們經(jīng)常需要對(duì)文件或文件夾進(jìn)行壓縮和解壓縮操作。Python 提供了強(qiáng)大的內(nèi)置模塊,如 zipfile 和 shutil,可以幫助我們高效地完成這些任務(wù)。
本文將介紹如何使用 Python 對(duì)文件夾或文件進(jìn)行壓縮和解壓縮,內(nèi)容包括兩種常見方式:zipfile 和 shutil,并提供完整代碼示例。
壓縮文件或文件夾
1. 使用 zipfile 模塊壓縮文件夾
zipfile 模塊是 Python 標(biāo)準(zhǔn)庫的一部分,用于創(chuàng)建和讀取 .zip 文件。它支持精細(xì)控制文件壓縮的內(nèi)容和路徑。
以下是一個(gè)將文件夾壓縮為 .zip 文件的代碼示例:
import os
import zipfile
def compress_folder_to_zip(folder_path, zip_path):
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
# 添加到 ZIP 文件時(shí),保留相對(duì)路徑
arcname = os.path.relpath(file_path, folder_path)
zipf.write(file_path, arcname)
print(f"壓縮完成:{zip_path}")
# 示例用法
compress_folder_to_zip('path/to/folder', 'output.zip')
代碼說明:
os.walk遍歷文件夾及其子文件夾中的所有文件。os.path.relpath確保壓縮后的文件路徑相對(duì)于原始文件夾路徑。zipfile.ZIP_DEFLATED指定壓縮算法。
2. 使用 shutil 模塊壓縮文件夾
如果你只需要簡單快速地將文件夾壓縮為 .zip 或 .tar 文件,可以使用 shutil 模塊。它支持多種壓縮格式,包括 zip、tar、gztar 等。
代碼示例如下:
import shutil
def compress_with_shutil(folder_path, output_path, format='zip'):
# format 支持 "zip", "tar", "gztar", "bztar", "xztar"
shutil.make_archive(output_path, format, folder_path)
print(f"壓縮完成:{output_path}.{format}")
# 示例用法
compress_with_shutil('path/to/folder', 'output', 'zip')
代碼說明:
shutil.make_archive方法自動(dòng)完成壓縮過程,output_path不需要包含擴(kuò)展名。format參數(shù)支持多種格式,選擇適合的壓縮格式即可。
解壓縮文件
1. 使用 zipfile 解壓 .zip 文件
使用 zipfile 模塊,我們可以解壓 .zip 文件到指定目錄:
import zipfile
def extract_zip(zip_path, extract_to):
with zipfile.ZipFile(zip_path, 'r') as zipf:
zipf.extractall(extract_to)
print(f"解壓完成:{extract_to}")
# 示例用法
extract_zip('output.zip', 'path/to/extract')
代碼說明:
zipf.extractall()會(huì)解壓縮 ZIP 文件中的所有內(nèi)容到指定路徑。- 適用于需要自定義解壓邏輯的場景。
2. 使用 shutil 解壓文件
如果文件是 .zip 格式,并且不需要復(fù)雜操作,可以使用 shutil 快速解壓:
import shutil
def extract_with_shutil(zip_path, extract_to):
shutil.unpack_archive(zip_path, extract_to)
print(f"解壓完成:{extract_to}")
# 示例用法
extract_with_shutil('output.zip', 'path/to/extract')
代碼說明:
shutil.unpack_archive支持解壓多種格式文件,如.zip和.tar。- 適用于快速解壓任務(wù)。
完整示例:壓縮與解壓縮結(jié)合
以下是一個(gè)包含壓縮和解壓縮功能的完整 Python 腳本:
import os
import zipfile
import shutil
def compress_folder(folder_path, zip_path):
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
arcname = os.path.relpath(file_path, folder_path)
zipf.write(file_path, arcname)
print(f"壓縮完成:{zip_path}")
def decompress_folder(zip_path, extract_to):
with zipfile.ZipFile(zip_path, 'r') as zipf:
zipf.extractall(extract_to)
print(f"解壓完成:{extract_to}")
# 示例用法
if __name__ == "__main__":
# 壓縮文件夾
compress_folder('path/to/folder', 'output.zip')
# 解壓 ZIP 文件
decompress_folder('output.zip', 'path/to/extract')
總結(jié)
在這篇文章中,我們學(xué)習(xí)了如何使用 Python 的 zipfile 和 shutil 模塊進(jìn)行文件夾和文件的壓縮與解壓縮操作:
- zipfile 模塊:適合需要精細(xì)控制的場景,如自定義壓縮路徑。
- shutil 模塊:快速完成壓縮和解壓縮,適合簡單任務(wù)。
無論你是需要對(duì)多個(gè)文件進(jìn)行壓縮管理,還是希望快速解壓一個(gè)文件夾,這兩種方式都能滿足你的需求。
到此這篇關(guān)于python解壓縮文件或文件夾兩種常見方式的文章就介紹到這了,更多相關(guān)python解壓縮文件或文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python交互模式基礎(chǔ)知識(shí)點(diǎn)學(xué)習(xí)
在本篇內(nèi)容里小編給大家整理的是關(guān)于python交互模式是什么的相關(guān)基礎(chǔ)知識(shí)點(diǎn),需要的朋友們可以參考下。2020-06-06
python批量導(dǎo)入數(shù)據(jù)進(jìn)Elasticsearch的實(shí)例
今天小編就為大家分享一篇python批量導(dǎo)入數(shù)據(jù)進(jìn)Elasticsearch的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
解決Keras中循環(huán)使用K.ctc_decode內(nèi)存不釋放的問題
這篇文章主要介紹了解決Keras中循環(huán)使用K.ctc_decode內(nèi)存不釋放的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
numpy如何刪除矩陣中的部分?jǐn)?shù)據(jù)numpy.delete
這篇文章主要介紹了numpy如何刪除矩陣中的部分?jǐn)?shù)據(jù)numpy.delete問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
opencv 圖像腐蝕和圖像膨脹的實(shí)現(xiàn)
這篇文章主要介紹了opencv 圖像腐蝕和圖像膨脹的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

