python文檔壓縮與解壓——zipfile

zip文件格式是通用的文檔壓縮標準,在ziplib模塊中,使用ZipFile類來操作zip文件,下面具體介紹一下:

創建一個ZipFile對象

class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])    #表示一個zip文件

參數file: 表示文件的路徑或類文件對象(file-like object);

參數mode:指示打開zip文件的模式,默認值爲'r',表示讀已經存在的zip文件,也可以爲'w'或'a','w'表示新建一個zip文檔或覆蓋一個已經存在的zip文檔,'a'表示將數據附加到一個現存的zip文檔中。

參數compression:表示在寫zip文檔時使用的壓縮方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。ZIP_STORE是默認的,表示不壓縮;ZIP_DEFLATED表示壓縮

參數allowZip64如果要操作的zip文件大小超過2G,應該將allowZip64設置爲True。

ZipFile對象常用的方法和屬性:

ZipFile.getinfo(name)::獲取zip文檔內指定文件的信息。返回一個zipfile.ZipInfo對象,它包括文件的詳細信息。

ZipFile.infolist():獲取zip文檔內所有文件的信息,返回一個zipfile.ZipInfo的列表。

ZipFile.namelist():獲取zip文檔內所有文件的名稱列表。

ZipFile.extract(member[, path[, pwd]]):將zip文檔內的指定文件解壓到當前目錄。

        參數member:指定要解壓的文件名稱或對應的ZipInfo對象;(需要解壓縮的文件名兒列表)

        參數path指定了解析文件保存的文件夾;

        參數pwd爲解壓密碼。

ZipFile.printdir():將zip文檔內的信息打印到控制檯上。

ZipFile.setpassword(pwd):設置zip文檔的密碼。

ZipFile.read(name[, pwd]):獲取zip文檔內指定文件的二進制數據。

zipfile.write(filename[, arcname[, compress_type]]):將文件寫到壓縮包中

         filename爲文件路徑,

         arcname爲添加到zip文檔之後保存的名稱;未指定將按 filename進行壓縮;

         參數compress_type表示壓縮方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED

Class ZipInfo

ZipFile.getinfo(name) 方法返回的是一個ZipInfo對象,表示zip文檔中相應文件的信息。它支持如下屬性:

  • ZipInfo.filename: 獲取文件名稱。
  • ZipInfo.date_time: 獲取文件最後修改時間。返回一個包含6個元素的元組:(年, 月, 日, 時, 分, 秒)
  • ZipInfo.compress_type: 壓縮類型。
  • ZipInfo.comment: 文檔說明。
  • ZipInfo.extr: 擴展項數據。
  • ZipInfo.create_system: 獲取創建該zip文檔的系統。
  • ZipInfo.create_version: 獲取 創建zip文檔的PKZIP版本。
  • ZipInfo.extract_version: 獲取 解壓zip文檔所需的PKZIP版本。
  • ZipInfo.reserved: 預留字段,當前實現總是返回0。
  • ZipInfo.flag_bits: zip標誌位。
  • ZipInfo.volume: 文件頭的卷標。
  • ZipInfo.internal_attr: 內部屬性。
  • ZipInfo.external_attr: 外部屬性。
  • ZipInfo.header_offset: 文件頭偏移位。
  • ZipInfo.CRC: 未壓縮文件的CRC-32。
  • ZipInfo.compress_size: 獲取壓縮後的大小。
  • ZipInfo.file_size: 獲取未壓縮的文件大小。

案例

文檔夾壓縮

f = zipfile.ZipFile('sss_db.zip', 'w', zipfile.ZIP_DEFLATED)
for dirpath, dirnames, filenames in os.walk(file):
    save_path = os.path.relpath(dirpath, file)   #獲取以壓縮文件夾開始的相對路徑
    for filename in filenames:
        f.write(os.path.join(dirpath, filename), os.path.join(save_path, filename)) f.close()

文檔解壓

#解壓zip格式文件
file = 'sss_db.zip'
zip_file = zipfile.ZipFile(os.path.join(path, file))
for names in zip_file.namelist():
    zip_file.extract(names, path)
zip_file.close()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章