python3實現zip格式壓縮資料夾
阿新 • • 發佈:2019-02-08
思路:先把第一級目錄中的檔案進行遍歷,如果是檔案,則把它連同當前路徑一起加入result(list),如果是子目錄,則在整個目錄上繼續深度優先遍歷,直到所有的檔案都被加入。主要使用python3中zipfile模組:
class zipfile.
ZipFile
(file [,mode [,compression [,allowZip64 ] ] ] )
引數說明:
1.第一個引數file可以是檔案(字串)的路徑,也可以是類檔案物件
2.第二個引數mode模式引數可以是'r'
讀取現有的檔案,'w'
以截斷並寫入一個新的檔案,或'a'
將追加到現有檔案。如果mode是'a'
和file引用現有的ZIP檔案,則會向其中新增其他檔案,如果檔案
3.第三個引數compression是編寫存檔時使用的ZIP壓縮方法,可以是ZIP_STORED
或ZIP_DEFLATED
Demo:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import zipfile def get_zip_file(input_path, result): """ 對目錄進行深度優先遍歷 :param input_path: :param result: :return: """ files = os.listdir(input_path) for file in files: if os.path.isdir(input_path + '/' + file): get_zip_file(input_path + '/' + file, result) else: result.append(input_path + '/' + file) def zip_file_path(input_path, output_path, output_name): """ 壓縮檔案 :param input_path: 壓縮的資料夾路徑 :param output_path: 解壓(輸出)的路徑 :param output_name: 壓縮包名稱 :return: """ f = zipfile.ZipFile(output_path + '/' + output_name, 'w', zipfile.ZIP_DEFLATED) filelists = [] get_zip_file(input_path, filelists) for file in filelists: f.write(file) # 呼叫了close方法才會保證完成壓縮 f.close() return output_path + r"/" + output_name if __name__ == '__main__': zip_file_path(r"./testing", 'F:', '123.zip')