1. 程式人生 > >python 打包下載

python 打包下載

看百度網盤我們會發現這麼一個需求,新建一個資料夾,然後向資料夾中上傳檔案,點選資料夾可以直接下載,下載的是一個壓縮檔案,將資料夾中所有檔案全部打包了下載下來。

在python中,我們要做檔案打包下載,需要用到模組 zipfile

python自帶zipfile 模組用來讀寫壓縮檔案

zipfile常見模考和方法:

1、is_zipfile:判斷是否路徑是壓縮檔案

  zipfile.is_zipfile(filePath)

      

 

2、ZipFile

  zf = zipfile.ZipFile(path, mode, zipfile.compression, allowZip64)

    path:壓縮檔案路徑

    mode:檔案開啟模式--> r:讀;w:寫;a:新增

    compression:zipfile用什麼壓縮方式

      ZIP_STORE:預設方式,只是儲存模式,不壓縮

      ZIP_DEFLATED:壓縮

    allowZip64:當壓縮檔案大於2G時,需要設定為True。

 

3、ZipFile物件的方法:

  1)zf.infolist()

    返回一個list列表,內容是zip檔案中子檔案的ZipInfo物件。

    包含的欄位有:檔名,壓縮方式,檔案許可權模式(讀寫),檔案大小等

    

  

  2)zf.getinfo(name)

    獲取壓縮檔案中某個具體的檔案的資訊,name:壓縮檔案中的檔名

 

  3)zf.namelist()

    獲取壓縮檔案在中所有檔名稱列表

 

  4)zf.printdir()

    打印出壓縮檔案中所有檔案資訊

  

  5)zf.write(filename,actname)

    將檔案新增到壓縮檔案中。

    filename:要新增到壓縮檔案中的檔案路徑

    actname:新增到壓縮檔案中的儲存的檔名稱

    如下:

      

    結果如下:

      

  6)zf.read(filename [, pwd])

    獲取壓縮檔案內指定檔案的二進位制資料。

 

要壓縮某路徑path下的所有檔案及資料夾,實現過程如下:

import zipfile

import os

def ZipFile(path, destPath):

  try:

    zf = zipfile.ZipFile(destPath, "w", zipfile.ZIP_DEFLATED)

    for dirpath,dirnames,filenames in os.walk(path):

      fpath = dirpath.replace(path, "")  # 將當前目錄替換為空,即以當前目錄為相對目錄,如果當前目錄下面還存在資料夾,則fpath為 【/子目錄】

      fpath = fpath and fpath + os.sep or ""

      for file in filenames:

        z.write(os.path.join(dirpath, file), fpath+file)

    zf.close()

  except Exception as e:

    print(e)

 

解壓:

 1、解壓壓縮檔案中的某個特定檔案:

  zf.extract(members,path)

 

 2、解壓全部檔案到指定路徑

  zf.extractall(path)