Python模組學習 —- zipfile zip檔案操作

來源:互聯網
上載者:User
文章目錄
  • class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
  • ZipFile.extract(member[, path[, pwd]])
  • ZipFile.extractall([path[, members[, pwd]]])
  • ZipFile.printdir()
  • ZipFile.setpassword(pwd)
  • ZipFile.read(name[, pwd])
  • ZipFile.write(filename[, arcname[, compress_type]])
  • ZipFile.writestr(zinfo_or_arcname, bytes)

  最近在寫一個網路用戶端下載程式,用於下載伺服器上的資料。有些資料(如文本,office文檔)如果直接傳輸的話,將會增加通訊的資料量,使下載時間變長。伺服器在傳輸這些資料之前先對其進行壓縮,用戶端接收到資料之後進行解壓,這樣可以減小網通傳輸資料的通訊量,縮短下載的時間,從而增加客戶體驗。以前用C#做類似應用程式的時候,我會用SharpZipLib這個開源組件,現在用Python做類似的工作,只要使用zipfile模組提供的api就可以輕鬆的完成。

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

class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

  建立一個ZipFile對象,表示一個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檔案大小超過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為解壓密碼。下面一個例子將儲存在程式根目錄下的txt.zip內的所有檔案解壓到D:/Work目錄:

import zipfile, os<br />zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))<br />for file in zipFile.namelist():<br /> zipFile.extract(file, r'd:/Work')<br />zipFile.close()

ZipFile.extractall([path[, members[, pwd]]])

  解壓zip文檔中的所有檔案到目前的目錄。參數members的預設值為zip文檔內的所有檔案名稱列表,也可以自己設定,選擇要解壓的檔案名稱。

ZipFile.printdir()

  將zip文檔內的資訊列印到控制台上。

ZipFile.setpassword(pwd)

  設定zip文檔的密碼。

ZipFile.read(name[, pwd])

  擷取zip文檔內指定檔案的位元據。下面的例子示範了read()的使用,zip文檔內包括一個txt.txt的文字檔,使用read()方法讀取其位元據,然後儲存到D:/txt.txt。

#coding=gbk<br />import zipfile, os<br />zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))<br />data = zipFile.read('txt.txt')<br />(lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data) #一行語句就完成了寫檔案操作。仔細琢磨哦~_~<br />zipFile.close()

ZipFile.write(filename[, arcname[, compress_type]])

  將指定檔案添加到zip文檔中。filename為檔案路徑,arcname為添加到zip文檔之後儲存的名稱, 參數compress_type表示壓縮方法,它的值可以是zipfile.
ZIP_STORED
或zipfile.
ZIP_DEFLATED。下面的例子示範了如何建立一個zip文檔,並將檔案D:/test.doc添加到壓縮文檔中。

import zipfile, os<br />zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w')<br />zipFile.write(r'D:/test.doc', 'ok.doc', zipfile.ZIP_DEFLATED)<br />zipFile.close()

ZipFile.writestr(zinfo_or_arcname, bytes)

  writestr()支援將位元據直接寫入到壓縮文檔。


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:
擷取未壓縮的檔案大小。

下面一個簡單的例子說明這些屬性的意思:

import zipfile, os<br />zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))<br />zipInfo = zipFile.getinfo('doc.doc')<br />print 'filename:', zipInfo.filename<br />print 'date_time:', zipInfo.date_time<br />print 'compress_type:', zipInfo.compress_type<br />print 'comment:', zipInfo.comment<br />print 'extra:', zipInfo.extra<br />print 'create_system:', zipInfo.create_system<br />print 'create_version:', zipInfo.create_version<br />print 'extract_version:', zipInfo.extract_version<br />print 'extract_version:', zipInfo.reserved<br />print 'flag_bits:', zipInfo.flag_bits<br />print 'volume:', zipInfo.volume<br />print 'internal_attr:', zipInfo.internal_attr<br />print 'external_attr:', zipInfo.external_attr<br />print 'header_offset:', zipInfo.header_offset<br />print 'CRC:', zipInfo.CRC<br />print 'compress_size:', zipInfo.compress_size<br />print 'file_size:', zipInfo.file_size<br />zipFile.close()

  感覺使用zipfile模組來處理zip檔案真的很簡單。想當初在.NET平台下,使用sharpziplib壓縮、解壓一個檔案,我花了N多時間,找了N多英文資源,才寫出一個能壓縮檔的demo。而現在使用Python,通過閱讀python手冊,一兩個小時就掌握了zipfile模組的基本使用。哈哈,使用Python,真爽!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.