Python zipfile模塊用來作zip格式編碼的壓縮和解壓縮的,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 fip
上面的代碼是讀取一個zip壓縮包裏全部文件的名字。z.namelist() 會返回壓縮包內全部文件名的列表。
再看看下面一個: it
複製代碼代碼以下:class
import zipfile
z = zipfile.ZipFile(filename, 'r')
for i in z.infolist():
print i.file_size, i.header_offset test
這裏使用了z.infolist(), 它返回的就是壓縮包內全部文件的信息,就是一個ZipInfo的列表。一個ZipInfo對象中包含了壓縮包內一個文件的信息,其中比較經常使用的是 filename, file_size, header_offset, 分別爲文件名,文件大小,文件數據在壓縮包中的偏移。其實以前的z.namelist()就是讀取的ZipInfo中的filename,組成一個 list返回的。
從壓縮包裏解壓縮出一個文件的方法是使用ZipFile的read方法:import
複製代碼代碼以下:file
import zipfile
z = zipfile.ZipFile(filename, 'r')
print z.read(z.namelist()[0]) 方法
這樣就讀取出z.namelist()中的第一個文件,而且輸出到屏幕,固然也能夠把它存儲到文件。下面是建立zip壓縮包的方法,與讀取的方法其實很相似的:im
複製代碼代碼以下:
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")