Python zipfile模塊

Python zipfile模塊用來作zip格式編碼的壓縮和解壓縮的,zipfile裏有兩個很是重要的class, 分別是ZipFile和ZipInfo, 在絕大多數的狀況下,咱們只須要使用這兩個class就能夠了。ZipFile是主要的類,用來建立和讀取zip文件而ZipInfo是存儲的zip文件 的每一個文件的信息的。
好比要讀取一個Python zipfile 模塊,這裏假設filename是一個文件的路徑:
編碼

複製代碼 代碼以下:spa


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


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

複製代碼 代碼以下:it


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


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

複製代碼 代碼以下:import


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


這樣就讀取出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") 

相關文章
相關標籤/搜索