1. 程式人生 > 程式設計 >Python模組zipfile原理及使用方法詳解

Python模組zipfile原理及使用方法詳解

zipfile是python裡用來做zip格式編碼的壓縮和解壓縮的,由於是很常見的zip格式,所以這個模組使用頻率也是比較高的

zipfile裡有兩個非常重要的class,分別是ZipFile和ZipInfo,在絕大多數的情況下,我們只需要使用這兩個class就可以了。

ZipFile是主要的類,用來建立和讀取zip檔案

ZipInfo是儲存的zip檔案的每個檔案的資訊的。

比如要讀取一個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怎麼辦呢?

其實這個就是ZipFile的write方法中第二個引數的作用了。只需要這樣呼叫:z.write("test/111.txt","test22/111.txt")

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。