Python實現(xiàn)批量壓縮解壓文件(zip、rar)
好長一段時間沒有更新了,最近手里的項目沒停過太忙了。今天正好有空就分享下之前編寫的一段代碼。
起因是因為我想將一些文件上傳至網(wǎng)盤,但奈何太窮開不起會員,無法上傳超過4G的文件。于是就想能不能使用Python實現(xiàn)批量壓縮文件夾,搞都搞了順便將解壓文件夾也寫出來了。今天就和大家分享一下。
一、導入相關庫
os庫是為了監(jiān)測生成的文件夾是否已存在。主要的庫是zipfile,它提供了有關windows下的文件/文件夾的壓縮、解壓的函數(shù)。
import os import zipfile
二、壓縮文件
今天偷個懶,就不一段一段的去解釋了,直接整個函數(shù)展示。相關的注釋已經(jīng)寫清楚了,主要函數(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) # 待壓縮的絕對路徑 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)建的壓縮對象用于執(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, "不是文件夾,不進行壓縮") 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文件,不進行解壓!") continue
四、完整代碼
# -*- coding: utf-8 -*- """ @Time : 2023/8/28 14:47 @Auth : RS迷途小書童 @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) # 待壓縮的絕對路徑 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)建的壓縮對象用于執(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, "不是文件夾,不進行壓縮") 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文件,不進行解壓!") continue if __name__ == "__main__": path = "G:/try/" # Compress_path_zip(path) Decompress_path_zip(path)
本來是想將壓縮加密文件和解壓加密文件寫出來的,結(jié)果zipfile庫好像不支持加密文件,所以就沒寫。雖然解壓加密文件可以,但是很呆,因為只有使用傳統(tǒng)加密的zip文件,才可以使用密碼解壓,不是傳統(tǒng)加密的就算密碼正確他也不解壓,所以就都不寫啦。大家如果想用的話,直接修改路徑就行。
到此這篇關于Python實現(xiàn)批量壓縮解壓文件(zip、rar)的文章就介紹到這了,更多相關Python 批量壓縮解壓文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
自動化測試時基于Python常用的幾個加密算法總結(jié)
這幾天做自動化測試,遇到一個問題,那就是接口的請求的密碼是加密的,產(chǎn)品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請求的時候,使用加密算法處理后的數(shù)據(jù)傳參,本文主要是整理了幾個加密算法,以便后續(xù)測試使用,需要的朋友可以參考下2023-12-12