1. 程式人生 > >python3實現zip格式壓縮資料夾

python3實現zip格式壓縮資料夾

思路:先把第一級目錄中的檔案進行遍歷,如果是檔案,則把它連同當前路徑一起加入result(list),如果是子目錄,則在整個目錄上繼續深度優先遍歷,直到所有的檔案都被加入。主要使用python3中zipfile模組:

class zipfile.ZipFilefile [mode [compression [allowZip64 

引數說明:

1.第一個引數file可以是檔案(字串)的路徑,也可以是類檔案物件

2.第二個引數mode模式引數可以是'r'讀取現有的檔案,'w'以截斷並寫入一個新的檔案,或'a'將追加到現有檔案。如果mode'a'file引用現有的ZIP檔案,則會向其中新增其他檔案,如果檔案

未引用ZIP檔案,則會將新的ZIP存檔附加到該檔案,這用於將ZIP存檔新增到另一個檔案

3.第三個引數compression是編寫存檔時使用的ZIP壓縮方法,可以是ZIP_STOREDZIP_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')