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)