1. 程式人生 > >Python打包與解壓zip

Python打包與解壓zip

打包

shutil模組

shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
  • 引數說明:

    • base_name:建立的目標檔名,包括路徑,減去任何特定格式的擴充套件
    • format:壓縮格式,zip,tar,bztar或gztar中的一個
    • root_dir:打包時切換到的根路徑。也就是說,開始打包時,會先執行路徑切換,切換到root_dir所指定的路徑,預設為當前路徑。
    • base_dir:開始打包的路徑。也就是說,該命令會對base_dir所指定的路徑進行打包,預設值為root_dir,即打包切換後的當前目錄。亦可指定某一特定子目錄,從而實現打包的檔案包含此統一的字首路徑
    • ownergroup為建立tar包時使用,預設為使用者當前的owner和```group``
  • 使用示例

import os
import datetime
import shutil

base_name = os.path.dirname(os.path.realpath(__file__))
tmp_folder_name = "tmp-%s"%datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
db_folder = os.path.join(base_name, "..", "data", tmp_folder_name)
if not os.path.exists(db_folder):
    os.makedirs(db_folder)
    

zip_file_name = "project_%s_%s"%(projectid,  datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S"))
shutil.make_archive(os.path.join(base_name, "..", "data", zip_file_name), 'zip', db_folder)

將db_folder的資料夾壓縮成data下的以zip_file_name命名的壓縮包。
壓縮包

解壓

Zipfile

ZipFile是主要的類,用來建立和讀取zip檔案
zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

建立一個ZipFile物件,表示一個Zip檔案。

  • 引數說明
    • file:檔案路徑或類檔案物件
    • mode:開啟zip檔案的模式,預設為‘r’.
      表示讀已經存在的zip檔案,也可以用‘w’或者‘a’,‘w’表示新建一個zip文件或者覆蓋一個已經存在的zip文件,‘a’表示將資料附加到一個現存的zip文件中。
    • compression表示寫zip文件時使用的壓縮方法,值可以是zipfile.ZIP_STORED或zipfile.ZIP_DEFLATED。
    • allowZIP64:如果文件大小超過2G,應該將allowZIP64設為TRUE。

ZipFile.namelist()

獲取Zip文件內所有檔案的名稱列表。

ZipFile.extract

ZipFile.extract(member[, path[, pwd]])

將zip文件內的指定檔案解壓到當前目錄。

  • 引數說明
    • member:要解壓的檔名或者ZipInfo物件
    • path: 解析檔案儲存的資料夾
    • pwd:解壓密碼
  • 使用示例
def un_zip(file_name,upload_path):
    """unzip zip file"""
    zip_file = zipfile.ZipFile(os.path.join(upload_path,file_name))
    file_name_pre=file_name.split('.')[0]
    restore_path=os.path.join(upload_path,file_name_pre)

    if not os.path.exists(restore_path):
        os.makedirs(restore_path)
    for names in zip_file.namelist():
        zip_file.extract(names,restore_path)
    zip_file.close()
    return restore_path
  

解壓

引用