Python實(shí)現(xiàn)批量壓縮解壓文件(zip、rar)
好長(zhǎng)一段時(shí)間沒(méi)有更新了,最近手里的項(xiàng)目沒(méi)停過(guò)太忙了。今天正好有空就分享下之前編寫(xiě)的一段代碼。
起因是因?yàn)槲蚁雽⒁恍┪募蟼髦辆W(wǎng)盤(pán),但奈何太窮開(kāi)不起會(huì)員,無(wú)法上傳超過(guò)4G的文件。于是就想能不能使用Python實(shí)現(xiàn)批量壓縮文件夾,搞都搞了順便將解壓文件夾也寫(xiě)出來(lái)了。今天就和大家分享一下。
一、導(dǎo)入相關(guān)庫(kù)
os庫(kù)是為了監(jiān)測(cè)生成的文件夾是否已存在。主要的庫(kù)是zipfile,它提供了有關(guān)windows下的文件/文件夾的壓縮、解壓的函數(shù)。
import os import zipfile
二、壓縮文件
今天偷個(gè)懶,就不一段一段的去解釋了,直接整個(gè)函數(shù)展示。相關(guān)的注釋已經(jīng)寫(xiě)清楚了,主要函數(shù)就是zipfile.ZipFile和zip_file.write。zip_file.write(file_path,file_each)中,file_path是文件夾中文件的完整路徑,file_each是文件名。
def Compress_path_zip(path_all): path_all_list = os.listdir(path_all) # 列出總文件夾內(nèi)所有需要壓縮的文件夾 for path_each in path_all_list: path_compress = os.path.join(path_all, path_each) # 待壓縮的絕對(duì)路徑 if os.path.isdir(path_compress): print("正在壓縮:%s" % path_each) # 遍歷所有需要壓縮的文件夾 if os.path.exists(path_all + "%s.zip" % path_each): print(path_all + "%s1.zip" % path_each+"已存在,新文件名為'%s'" % (path_all + "%s1.zip" % path_each)) zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True) # 創(chuàng)建的壓縮對(duì)象用于執(zhí)行后續(xù)操作 # file_list = zip_file.namelist() # 列出壓縮文件夾中所有文件 else: zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True) file_list = os.listdir(path_compress) # 待壓縮文件夾內(nèi)所有文件 # zip_file.setpassword(b'123') for file_each in file_list: # 遍歷所有文件夾內(nèi)的文件 file_path = os.path.join(path_compress, file_each) zip_file.write(file_path, file_each) zip_file.close() else: print(path_each, "不是文件夾,不進(jìn)行壓縮") continue
三、解壓文件
這段代碼就不細(xì)說(shuō)了,反正修改了路徑就能直接使用了。
def Decompress_path_zip(path_all): path_all_list = os.listdir(path_all) for path_each in path_all_list: # 遍歷所有需要壓縮的文件夾 if path_each.endswith('.zip'): print("正在解壓:%s" % path_each) path_decompress = os.path.join(path_all, path_each) zip_file = zipfile.ZipFile(path_decompress, 'r') # 壓縮文件位置 for file in zip_file.namelist(): if os.path.exists(path_decompress[:-4]): print("'%s'" % path_decompress[:-4], "已存在,新文件名為'%s'" % (path_decompress[:-4] + "1")) zip_file.extract(file, path_decompress[:-4] + "1") # 解壓位置,pwd="1234".encode('utf-8') else: zip_file.extract(file, path_decompress[:-4]) # 解壓位置 zip_file.close() else: print(path_each, "非zip文件,不進(jìn)行解壓!") continue
四、完整代碼
# -*- coding: utf-8 -*- """ @Time : 2023/8/28 14:47 @Auth : RS迷途小書(shū)童 @File :Compress and Decompress Folders.py @IDE :PyCharm @Purpose:批量壓縮/解壓文件夾 """ import os import zipfile def Compress_path_zip(path_all): path_all_list = os.listdir(path_all) # 列出總文件夾內(nèi)所有需要壓縮的文件夾 for path_each in path_all_list: path_compress = os.path.join(path_all, path_each) # 待壓縮的絕對(duì)路徑 if os.path.isdir(path_compress): print("正在壓縮:%s" % path_each) # 遍歷所有需要壓縮的文件夾 if os.path.exists(path_all + "%s.zip" % path_each): print(path_all + "%s1.zip" % path_each+"已存在,新文件名為'%s'" % (path_all + "%s1.zip" % path_each)) zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True) # 創(chuàng)建的壓縮對(duì)象用于執(zhí)行后續(xù)操作 # file_list = zip_file.namelist() # 列出壓縮文件夾中所有文件 else: zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True) file_list = os.listdir(path_compress) # 待壓縮文件夾內(nèi)所有文件 # zip_file.setpassword(b'123') for file_each in file_list: # 遍歷所有文件夾內(nèi)的文件 file_path = os.path.join(path_compress, file_each) zip_file.write(file_path, file_each) zip_file.close() else: print(path_each, "不是文件夾,不進(jìn)行壓縮") continue def Decompress_path_zip(path_all): path_all_list = os.listdir(path_all) for path_each in path_all_list: # 遍歷所有需要壓縮的文件夾 if path_each.endswith('.zip'): print("正在解壓:%s" % path_each) path_decompress = os.path.join(path_all, path_each) zip_file = zipfile.ZipFile(path_decompress, 'r') # 壓縮文件位置 for file in zip_file.namelist(): if os.path.exists(path_decompress[:-4]): print("'%s'" % path_decompress[:-4], "已存在,新文件名為'%s'" % (path_decompress[:-4] + "1")) zip_file.extract(file, path_decompress[:-4] + "1") # 解壓位置,pwd="1234".encode('utf-8') else: zip_file.extract(file, path_decompress[:-4]) # 解壓位置 zip_file.close() else: print(path_each, "非zip文件,不進(jìn)行解壓!") continue if __name__ == "__main__": path = "G:/try/" # Compress_path_zip(path) Decompress_path_zip(path)
本來(lái)是想將壓縮加密文件和解壓加密文件寫(xiě)出來(lái)的,結(jié)果zipfile庫(kù)好像不支持加密文件,所以就沒(méi)寫(xiě)。雖然解壓加密文件可以,但是很呆,因?yàn)橹挥惺褂脗鹘y(tǒng)加密的zip文件,才可以使用密碼解壓,不是傳統(tǒng)加密的就算密碼正確他也不解壓,所以就都不寫(xiě)啦。大家如果想用的話,直接修改路徑就行。
到此這篇關(guān)于Python實(shí)現(xiàn)批量壓縮解壓文件(zip、rar)的文章就介紹到這了,更多相關(guān)Python 批量壓縮解壓文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺析Python中壓縮zipfile與解壓縮tarfile模塊的使用
- python tarfile壓縮包操作保姆級(jí)教程
- python標(biāo)準(zhǔn)庫(kù)壓縮包模塊zipfile和tarfile詳解(常用標(biāo)準(zhǔn)庫(kù))
- Python標(biāo)準(zhǔn)庫(kù)之zipfile和tarfile模塊的使用
- Python中使用tarfile壓縮、解壓tar歸檔文件示例
- python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解
- Python壓縮解壓縮zip文件及破解zip文件密碼的方法
- Python使用tarfile模塊實(shí)現(xiàn)免費(fèi)壓縮解壓
相關(guān)文章
自動(dòng)化測(cè)試時(shí)基于Python常用的幾個(gè)加密算法總結(jié)
這幾天做自動(dòng)化測(cè)試,遇到一個(gè)問(wèn)題,那就是接口的請(qǐng)求的密碼是加密的,產(chǎn)品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請(qǐng)求的時(shí)候,使用加密算法處理后的數(shù)據(jù)傳參,本文主要是整理了幾個(gè)加密算法,以便后續(xù)測(cè)試使用,需要的朋友可以參考下2023-12-12詳解如何使用Python實(shí)現(xiàn)過(guò)濾指定進(jìn)程
Python提供了多種方式來(lái)實(shí)現(xiàn)對(duì)進(jìn)程的過(guò)濾和操作,本文將介紹如何利用Python來(lái)過(guò)濾指定進(jìn)程,并展示一些實(shí)用的技巧和方法,希望對(duì)大家有所幫助2024-04-04anaconda安裝后打不開(kāi)解決方式(親測(cè)有效)
Anaconda是一個(gè)和Canopy類(lèi)似的科學(xué)計(jì)算環(huán)境,但用起來(lái)更加方便,下面這篇文章主要給大家介紹了關(guān)于anaconda安裝后打不開(kāi)解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09利用python中的matplotlib打印混淆矩陣實(shí)例
這篇文章主要介紹了利用python中的matplotlib打印混淆矩陣實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06python中列表推導(dǎo)式與生成器表達(dá)式對(duì)比詳解
python當(dāng)然不是一門(mén)編譯型語(yǔ)言,但是它還是要被解析成二進(jìn)制的字節(jié)碼才能被執(zhí)行,執(zhí)行它的正是python解釋器,下面這篇文章主要給大家介紹了關(guān)于python中列表推導(dǎo)式與生成器表達(dá)式對(duì)比的相關(guān)資料,需要的朋友可以參考下2023-01-01