python筆記之ZipFile模塊


python筆記之ZipFile模塊

	zipfile模塊用來做zip格式編碼的壓縮和解壓縮的,zipfile里有兩個非常重要的class, 分別是ZipFile和ZipInfo, 在絕大多數的情況下,我們只需要使用這兩個class就可以了。ZipFile是主要的類,用來創建和讀取zip文件而ZipInfo是存儲的zip文件的每個文件的信息的。


	比如要讀取一個Python zipfile 模塊,這里假設filename是一個文件的路徑:
import zipfile  
z = zipfile.ZipFile(filename, 'r')  
for i in z.infolist():  
	print i.file_size, i.header_offset 

	這里使用了z.infolist(), 它返回的就是壓縮包內所有文件的信息,就是一個ZipInfo的列表。一個ZipInfo對象中包含了壓縮包內一個文件的信息,其中比較常用的是 filename, file_size, header_offset, 分別為文件名,文件大小,文件數據在壓縮包中的偏移。其實之前的z.namelist()就是讀取的ZipInfo中的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")  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM