zipfile

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

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

     建立一個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。code

      ZipFile還提供了以下經常使用的方法和屬性:對象

    ZipFile.getinfo(name):
    獲取zip文檔內指定文件的信息。返回一個zipfile.ZipInfo對象,它包括文件的詳細信息。將在下面 具體介紹該對象。blog

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

    ZipFile.namelist() 獲取zip文檔內全部文件的名稱列表。資源

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

      將zip文檔內的指定文件解壓到當前目錄。參數member指定要解壓的文件名稱或對應的ZipInfo對象;參數path指定了解析文件保存的文件夾;參數pwd爲解壓密碼。下面一個例子將保存在程序根目錄下的txt.zip內的全部文件解壓到D:/Work目錄:get

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

ZipFile.extractall([path[, members[, pwd]]])   解壓zip文檔中的全部文件到當前目錄。參數members的默認值爲zip文檔內的全部文件名稱列表,也能夠本身設置,選擇要解壓的文件名稱。

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

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

    ZipFile.read(name[, pwd])
    獲取zip文檔內指定文件的二進制數據。下面的例子演示了read()的使用,zip文檔內包括一個txt.txt的文本文件,使用read()方法讀取其二進制數據,而後保存到D:/txt.txt。

#coding=gbk
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
data = zipFile.read('txt.txt')
(lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data) #一行語句就完成了寫文件操做。仔細琢磨哦~~
zipFile.close() #coding=gbk import zipfile, os zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip')) data = zipFile.read('txt.txt') (lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data) #一行語句就完成了寫文件操做。仔細琢磨哦~
~ 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
zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w')
zipFile.write(r'D:/test.doc', 'ok.doc', zipfile.ZIP_DEFLATED)
zipFile.close() import zipfile, os zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w') zipFile.write(r'D:/test.doc', 'ok.doc', zipfile.ZIP_DEFLATED) zipFile.close()

ZipFile.writestr(zinfo_or_arcname, bytes) writestr()支持將二進制數據直接寫入到壓縮文檔。

  1. 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: 獲取未壓縮的文件大小。

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

  1. import zipfile, os

    zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))

    zipInfo = zipFile.getinfo('doc.doc')

    print 'filename:', zipInfo.filename

    print 'date_time:', zipInfo.date_time

    print 'compress_type:', zipInfo.compress_type

    print 'comment:', zipInfo.comment

    print 'extra:', zipInfo.extra

    print 'create_system:', zipInfo.create_system

    print 'create_version:', zipInfo.create_version

    print 'extract_version:', zipInfo.extract_version

    print 'extract_version:', zipInfo.reserved

    print 'flag_bits:', zipInfo.flag_bits

    print 'volume:', zipInfo.volume

    print 'internal_attr:', zipInfo.internal_attr

    print 'external_attr:', zipInfo.external_attr

    print 'header_offset:', zipInfo.header_offset

    print 'CRC:', zipInfo.CRC

    print 'compress_size:', zipInfo.compress_size

    print 'file_size:', zipInfo.file_size

    zipFile.close()

    import zipfile, os

    zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))

    zipInfo = zipFile.getinfo('doc.doc')

    print 'filename:', zipInfo.filename

    print 'date_time:', zipInfo.date_time

    print 'compress_type:', zipInfo.compress_type

    print 'comment:', zipInfo.comment

    print 'extra:', zipInfo.extra

    print 'create_system:', zipInfo.create_system

    print 'create_version:', zipInfo.create_version

    print 'extract_version:', zipInfo.extract_version

    print 'extract_version:', zipInfo.reserved

    print 'flag_bits:', zipInfo.flag_bits

    print 'volume:', zipInfo.volume

    print 'internal_attr:', zipInfo.internal_attr

    print 'external_attr:', zipInfo.external_attr

    print 'header_offset:', zipInfo.header_offset

    print 'CRC:', zipInfo.CRC

    print 'compress_size:', zipInfo.compress_size

    print 'file_size:', zipInfo.file_size

    zipFile.close()

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

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/JGood/archive/2009/07/15/4351911.aspx

================ Python 解壓縮zip文件 2010-01-28 16:11

import zipfile

def unzip(): zip_path="c://a.zip" save_path = "c://a" zipfile.ZipFile(zip_path).extractall(save_path)

ZipFile裏有兩個很是重要的class, 分別是ZipFile和ZipInfo, 在絕大多數的狀況下,咱們只須要使用這兩個class就能夠了。ZipFile是主要的類,用來建立和讀取zip文件而ZipInfo是存儲的zip文件的每一個文件的信息的。

好比要讀取一個Python ZipFile模塊,這裏假設filename是一個文件的路徑:

import ZipFile  
z = ZipFile.ZipFile(filename, 'r')  # 這裏的第二個參數用r表示是讀取zip文件,w是建立一個zip文件  
for f in z.namelist():  
print f

上面的代碼是讀取一個zip壓縮包裏全部文件的名字。z.namelist() 會返回壓縮包內全部文件名的列表。

再看看下面一個:

import ZipFile  
z = ZipFile.ZipFile(filename, 'r')  
for i in z.infolist():  
print i.file_size, i.header_offset

這裏使用了z.infolist(), 它返回的就是壓縮包內全部文件的信息,就是 一個ZipInfo的列表。一個ZopInfo對象中包含了壓縮包內一個文件的信息,其中比較經常使用的是 filename, file_size, header_offset, 分別爲文件名,文件大小,文件數據在壓縮包中的偏移。其實以前的z.namelist()就是讀取的ZopInfo中的filename,組成一個 list返回的。 從壓縮包裏解壓縮出一個文件的方法是使用ZipFile的read方法:

import ZipFile  
z = ZipFile.ZipFile(filename, 'r')  
print z.read(z.namelist()[0])

這樣就讀取出z.namelist()中的第一個文件,而且輸出到屏幕,固然也能夠把它存儲到文件。

下面是建立zip壓縮包的方法:

與讀取的方法其實很相似的:

import ZipFile, os  
z = ZipFile.ZipFile(filename, 'w')  # 注意這裏的第二個參數是w,這裏的filename是壓縮包的名字

假設要把一個叫testdir中的文件所有添加到壓縮包裏(這裏只添加一級子目錄中的文件):

if os.path.isdir(testdir):  
for d in os.listdir(testdir):  
z.write(testdir+os.sep+d)  
# close() 是必須調用的!  
z.close()

上面的代碼很是的簡單。想一想還有一個問題,若是我把一個test/111.txt 添加到壓縮包裏以後我但願在包裏它放到test22/111.txt怎麼辦呢?其實這個就是Python ZipFile模塊的write方法中第二個參數的做用了。只須要這樣調用:

z.write("test/111.txt", "test22/111.txt")

以上就是咱們爲你們介紹的有關Python ZipFile模塊的相關知識。

=============== 從簡單的角度來看的話,zip格式會是個不錯的選擇,並且python對zip格式的支持夠簡單,夠好用。 1)簡單應用 若是你僅僅是但願用python來作壓縮和解壓縮,那麼就不用去翻文檔了,這裏提供一個簡單的用法,讓你一看就能明白。 import zipfile f = zipfile.ZipFile('filename.zip', 'w' ,zipfile.ZIP_DEFLATED) f.write('file1.txt') f.write('file2.doc') f.write('file3.rar') f.close() f.zipfile.ZipFile('filename') f.extractall() f.close() 不知道上面的例子是否是足夠簡單呢?

  1. 1.1 zipfile.ZipFile(fileName[, mode[, compression[, allowZip64]]]) fileName是沒有什麼疑問的了。

    mode和通常的文件操做同樣,'r'表示打開一個存在的只讀ZIP文件;'w'表示清空並打開一個只寫的ZIP文件,或建立一個只寫的ZIP文件;'a'表示打開一個ZIP文件,並添加內容。

    compression表示壓縮格式,可選的壓縮格式只有2個:ZIP_STORE;ZIP_DEFLATED。ZIP_STORE是默認的,表示不壓縮;ZIP_DEFLATED表示壓縮,若是你不知道什麼是Deflated,那麼建議你去補補課。

    allowZip64爲True時,表示支持64位的壓縮,通常而言,在所壓縮的文件大於2G時,會用到這個選項;默認狀況下,該值爲False,由於Unix系統不支持。

    1.2 zipfile.close()

    說真的,這個沒什麼可說的,若是有的話,那就是你寫入的任何文件在關閉以前不會真正寫入磁盤。

    1.3 zipfile.write(filename[, arcname[, compress_type]])

    acrname是壓縮文件中該文件的名字,默認狀況下和filename同樣

    compress_type的存在是由於zip文件容許被壓縮的文件能夠有不一樣的壓縮類型。

    1.4 zipfile.extractall([path[, member[, password]]])

    path解壓縮目錄,沒什麼可說的

    member須要解壓縮的文件名兒列表

    password當zip文件有密碼時須要該選項

    對於簡單的應用,這麼多就夠了。 2)高級應用

    2.1 zipfile.is_zipfile(filename)

    判斷一個文件是否是壓縮文件

    2.2 ZipFile.namelist() 返回文件列表

    2.3 ZipFile.open(name[, mode[, password]])打開壓縮文檔中的某個文件

    2.4 ZipFile.infolist()

    2.5 ZipFile.getinfo(name)

    上述文件返回ZipInfo對象,只不過一個返回的是列表,一個返回的是一個ZipInfo

    ZipInfo類

    2.6 ZipInfo.filename

    2.7 ZipInfo.date_time

    返回值的格式爲(year,month,date,hour,minute,second)

    2.8 ZipInfo.compress_type

    2.9 ZipInfo.comment

    2.10ZipInfo.extra

    2.11ZipInfo.create_system

    2.12ZipInfo.extract_version

    2.13ZipInfo.reserved 老是0

    2.14ZipInfo.flag_bits

    2.15ZipInfo.volume

    2.16ZipInfo.internal_attr

    2.17ZipInfo.external_attr

    2.18ZipInfo.header_offset

    2.19ZipInfo.CRC

    2.20ZipInfo.file_size

    2.21ZipInfo.compress_size

    2.22ZipFile.testzip()

    檢查每一個文件和它對應的CRC,若是有錯誤返回對應的文件列表

    2.23ZipFile.setpassword(password)

    2.24ZipFile.read(name[,password])

    返回對應的文件

    2.25ZipFile.printdir()

    打印壓縮文件夾的信息

    2.26ZipFile.writestr(zipinfo_or_arcname, bytes)

    PyZipFile類

    zipfile.PyZipFile除了上面的方法和屬性以外,還有一個特殊的方法

    2.27PyZipFile.writepy(pathname,basename)

    通常狀況下,僅僅壓縮.pyc和.pyo文件,不壓縮.py文件


  1. zip文件格式信息

    一個 ZIP 文件由三個部分組成:壓縮源文件數據區+壓縮源文件目錄區+壓縮源文件目錄結束標誌

    1)壓縮源文件數據區

    在這個數據區中每個壓縮的源文件/目錄都是一條記錄,記錄的格式以下: [文件頭+ 文件數據 + 數據描述符]

       a、文件頭結構

       組成 長度

       文件頭標記 4 bytes (0x04034b50)

       解壓文件所需 pkware 版本 2 bytes

       全局方式位標記 2 bytes

       壓縮方式 2 bytes

       最後修改文件時間 2 bytes

       最後修改文件日期 2 bytes

       CRC-32校驗 4 bytes

       壓縮後尺寸 4 bytes

       未壓縮尺寸 4 bytes

       文件名長度 2 bytes

       擴展記錄長度 2 bytes

       文件名 (不定長度)

       擴展字段 (不定長度)       b、文件數據       c、數據描述符

      組成 長度

       CRC-32校驗 4 bytes

       壓縮後尺寸 4 bytes

       未壓縮尺寸 4 bytes

      這個數據描述符只在全局方式位標記的第3位設爲1時才存在(見後詳解),緊接在壓縮數據的最後一個字節後。這個數據描述符只用在不能對輸出的 ZIP 文件進行檢索時使用。例如:在一個不能檢索的驅動器(如:磁帶機上)上的 ZIP 文件中。若是是磁盤上的ZIP文件通常沒有這個數據描述符。    2)壓縮源文件目錄區

       在這個數據區中每一條紀錄對應在壓縮源文件數據區中的一條數據

       組成 長度

       目錄中文件文件頭標記 4 bytes (0x02014b50)

       壓縮使用的pkware 版本 2 bytes

       解壓文件所需 pkware 版本 2 bytes

       全局方式位標記 2 bytes

       壓縮方式 2 bytes

       最後修改文件時間 2 bytes

       最後修改文件日期 2 bytes

       CRC-32校驗 4 bytes

       壓縮後尺寸 4 bytes

       未壓縮尺寸 4 bytes

       文件名長度 2 bytes

       擴展字段長度 2 bytes

       文件註釋長度 2 bytes

       磁盤開始號 2 bytes

       內部文件屬性 2 bytes

       外部文件屬性 4 bytes

       局部頭部偏移量 4 bytes

       文件名 (不定長度)

       擴展字段 (不定長度)

       文件註釋 (不定長度)

3)壓縮源文件目錄結束標誌

組成 長度

   目錄結束標記 4 bytes (0x02014b50)

   當前磁盤編號 2 bytes

   目錄區開始磁盤編號 2 bytes

   本磁盤上紀錄總數 2 bytes

   目錄區中紀錄總數 2 bytes

   目錄區尺寸大小 4 bytes

   目錄區對第一張磁盤的偏移量 4 bytes

   ZIP 文件註釋長度 2 bytes

   ZIP 文件註釋 (不定長度)

相關文章
相關標籤/搜索