zipfile
一、創建一個ZipFile對象,表示一個zip文件
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
參數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。
二、常用功能
zipfile裏有兩個非常常用的class, 分別是ZipFile和ZipInfo,ZipFile用來創建和讀取zip文件,ZipInfo是存儲的zip文件的每個文件的信息的
1、zipfile.is_zipfile(filename)
判斷一個文件是否爲壓縮文件
2、ZipFile.namelist()
獲取zip文檔內所有文件的名稱列表
import zipfile
f = zipfile.ZipFile(filename, 'r') #r表示是讀取zip文件,w或a是創建一個zip文件
for f_name in f.namelist(): #.namelist() 返回壓縮包內所有文件名的列表
print(f_name)
3、ZipFile.extract(member[, path[, pwd]])
將zip文檔內的指定文件解壓到當前目錄。參數member指定要解壓的文件名稱或對應的ZipInfo對象;參數path指定了解析文件保存的文件夾;參數pwd爲解壓密碼
import zipfile, os
f = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip')) #拼接成一個路徑
for file in f.namelist():
f.extract(file, r'd:/Work') #在d:/Work中解壓文件
f.close()
三、循環解壓
該代碼能遍歷壓縮包中的文件夾,遇到子壓縮包,能夠再次解壓,直到解壓完所有子壓縮包。
“參數”的作用是:不刪除原始壓縮包,而刪除所有子壓縮包
import os, zipfile
class UnZip():
def scan(self, source_dir):
files = os.listdir(source_dir)
n = 0
for sub_file in files:
n += 1
sub_file_path = os.path.join(source_dir, sub_file)
if os.path.isdir(sub_file_path):
self.scan(sub_file_path)
else:
if sub_file_path.lower().endswith('.zip'):
print('hi')
output_sub_dir = sub_file_path[:-4]
self.unzip(sub_file_path, output_sub_dir)
self.scan(output_sub_dir)
if n != 1:
os.remove(sub_file_path)
def unzip(self, file, folder):
fz = zipfile.ZipFile(file, 'r')
for sub_file_name in fz.namelist():
fz.extract(sub_file_name, folder)
if __name__ == '__main__':
UnZip().scan(r'D:\Projects\CA\script')