python解壓縮文件或文件夾兩種常見方式(附代碼)
前言
在日常開發(fā)或數(shù)據(jù)處理工作中,我們經(jīng)常需要對文件或文件夾進行壓縮和解壓縮操作。Python 提供了強大的內(nèi)置模塊,如 zipfile 和 shutil,可以幫助我們高效地完成這些任務。
本文將介紹如何使用 Python 對文件夾或文件進行壓縮和解壓縮,內(nèi)容包括兩種常見方式:zipfile 和 shutil,并提供完整代碼示例。
壓縮文件或文件夾
1. 使用 zipfile 模塊壓縮文件夾
zipfile 模塊是 Python 標準庫的一部分,用于創(chuàng)建和讀取 .zip 文件。它支持精細控制文件壓縮的內(nèi)容和路徑。
以下是一個將文件夾壓縮為 .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 文件時,保留相對路徑
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確保壓縮后的文件路徑相對于原始文件夾路徑。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方法自動完成壓縮過程,output_path不需要包含擴展名。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()會解壓縮 ZIP 文件中的所有內(nèi)容到指定路徑。- 適用于需要自定義解壓邏輯的場景。
2. 使用 shutil 解壓文件
如果文件是 .zip 格式,并且不需要復雜操作,可以使用 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。- 適用于快速解壓任務。
完整示例:壓縮與解壓縮結(jié)合
以下是一個包含壓縮和解壓縮功能的完整 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é)
在這篇文章中,我們學習了如何使用 Python 的 zipfile 和 shutil 模塊進行文件夾和文件的壓縮與解壓縮操作:
- zipfile 模塊:適合需要精細控制的場景,如自定義壓縮路徑。
- shutil 模塊:快速完成壓縮和解壓縮,適合簡單任務。
無論你是需要對多個文件進行壓縮管理,還是希望快速解壓一個文件夾,這兩種方式都能滿足你的需求。
到此這篇關(guān)于python解壓縮文件或文件夾兩種常見方式的文章就介紹到這了,更多相關(guān)python解壓縮文件或文件夾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python批量導入數(shù)據(jù)進Elasticsearch的實例
今天小編就為大家分享一篇python批量導入數(shù)據(jù)進Elasticsearch的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
解決Keras中循環(huán)使用K.ctc_decode內(nèi)存不釋放的問題
這篇文章主要介紹了解決Keras中循環(huán)使用K.ctc_decode內(nèi)存不釋放的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
numpy如何刪除矩陣中的部分數(shù)據(jù)numpy.delete
這篇文章主要介紹了numpy如何刪除矩陣中的部分數(shù)據(jù)numpy.delete問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02

