在數(shù)字化時代,隨著數(shù)據(jù)量的不斷增長,文件存儲與傳輸面臨著空間和效率的雙重挑戰(zhàn)。無論是處理大量的日志文件、備份數(shù)據(jù),還是通過網(wǎng)絡(luò)發(fā)送大型文件,文件壓縮都成為了優(yōu)化存儲與傳輸?shù)闹匾侄?。Python 憑借其強(qiáng)大的標(biāo)準(zhǔn)庫和豐富的第三方庫,能夠輕松實現(xiàn)文件的壓縮與解壓操作。小編就詳細(xì)了解 Python 中文件壓縮與解壓的具體操作步驟。
一、使用zipfile庫進(jìn)行 ZIP 格式文件壓縮與解壓
zipfile是 Python 標(biāo)準(zhǔn)庫中用于處理 ZIP 格式文件的模塊,ZIP 格式是一種常見且廣泛支持的文件壓縮格式,具有跨平臺性強(qiáng)的特點。
(一)文件壓縮
導(dǎo)入模塊:在 Python 代碼中,首先導(dǎo)入zipfile模塊:
TypeScript取消自動換行復(fù)制
import zipfile創(chuàng)建壓縮文件并添加內(nèi)容:使用ZipFile類創(chuàng)建一個 ZIP 壓縮文件對象,并通過write方法將文件添加到壓縮包中。例如,將當(dāng)前目錄下的file1.txt和file2.txt兩個文件壓縮成archive.zip:
TypeScript取消自動換行復(fù)制
with zipfile.ZipFile('archive.zip', 'w') as zipf:
zipf.write('file1.txt')
zipf.write('file2.txt')上述代碼中,'w'表示以寫入模式打開壓縮文件,如果文件已存在則會覆蓋。如果希望以追加模式添加文件,可以使用'a'。此外,ZipFile類還支持設(shè)置壓縮方式,例如使用zipfile.ZIP_DEFLATED進(jìn)行更高效的壓縮:
TypeScript取消自動換行復(fù)制
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
zipf.write('file1.txt')
zipf.write('file2.txt')壓縮文件夾:如果要壓縮整個文件夾,可以通過遞歸遍歷文件夾內(nèi)的所有文件來實現(xiàn)。以下是一個示例函數(shù):
TypeScript取消自動換行復(fù)制
import os
def zip_folder(folder_path, zip_name):
with zipfile.ZipFile(zip_name, '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)
zipf.write(file_path)
zip_folder('my_folder','my_folder.zip')該函數(shù)會遍歷指定文件夾及其子文件夾下的所有文件,并將它們添加到壓縮包中。
(二)文件解壓
解壓單個文件:使用extract方法可以將壓縮包中的單個文件解壓到指定目錄。例如,將archive.zip中的file1.txt解壓到extracted_files目錄:
TypeScript取消自動換行復(fù)制
with zipfile.ZipFile('archive.zip', 'r') as zipf:
zipf.extract('file1.txt', 'extracted_files')解壓全部文件:如果要解壓壓縮包中的所有文件,可以使用extractall方法:
TypeScript取消自動換行復(fù)制
with zipfile.ZipFile('archive.zip', 'r') as zipf:
zipf.extractall('extracted_files')上述代碼會將archive.zip中的所有文件解壓到extracted_files目錄下。
二、使用tarfile庫進(jìn)行 TAR 格式文件壓縮與解壓
TAR 格式也是一種常用的文件歸檔格式,常與 Gzip、Bzip2 等壓縮算法結(jié)合使用,形成.tar.gz(TGZ)、.tar.bz2等壓縮文件格式。
(一)文件壓縮
導(dǎo)入模塊:導(dǎo)入tarfile模塊:
TypeScript取消自動換行復(fù)制
import tarfile創(chuàng)建 TAR 壓縮文件:創(chuàng)建.tar格式的壓縮文件,例如將file1.txt和file2.txt打包成archive.tar:
TypeScript取消自動換行復(fù)制
with tarfile.open('archive.tar', 'w') as tar:
tar.add('file1.txt')
tar.add('file2.txt')創(chuàng)建.tar.gz格式壓縮文件:如果要創(chuàng)建.tar.gz格式的壓縮文件,只需將打開模式改為'w:gz':
TypeScript取消自動換行復(fù)制
with tarfile.open('archive.tar.gz', 'w:gz') as tar:
tar.add('file1.txt')
tar.add('file2.txt')創(chuàng)建.tar.bz2格式壓縮文件:同理,創(chuàng)建.tar.bz2格式的壓縮文件,打開模式使用'w:bz2':
TypeScript取消自動換行復(fù)制
with tarfile.open('archive.tar.bz2', 'w:bz2') as tar:
tar.add('file1.txt')
tar.add('file2.txt')(二)文件解壓
解壓.tar文件:使用extractall方法解壓.tar文件,例如將archive.tar解壓到extracted_tar_files目錄:
TypeScript取消自動換行復(fù)制
with tarfile.open('archive.tar', 'r') as tar:
tar.extractall('extracted_tar_files')解壓.tar.gz和.tar.bz2文件:對于.tar.gz和.tar.bz2文件,解壓方式類似:
TypeScript取消自動換行復(fù)制
# 解壓.tar.gz文件
with tarfile.open('archive.tar.gz', 'r:gz') as tar:
tar.extractall('extracted_tar_gz_files')
# 解壓.tar.bz2文件
with tarfile.open('archive.tar.bz2', 'r:bz2') as tar:
tar.extractall('extracted_tar_bz2_files')Python 通過zipfile和tarfile等庫,為文件的壓縮與解壓提供了便捷、高效的解決方案。無論是處理 ZIP 格式還是 TAR 格式的文件,開發(fā)者都能根據(jù)實際需求,靈活運用這些工具,優(yōu)化數(shù)據(jù)存儲和傳輸?shù)牧鞒蹋嵘ぷ餍?。掌握這些文件壓縮與解壓的操作方法,是 Python 開發(fā)者在處理文件相關(guān)任務(wù)時不可或缺的技能。