支持壓縮單個文件和多級文件夾python
使用方法app
zip_compress(to_zip,save_zip_name):#to_zip表示源文件或者源目錄,save_zip_name表示目的zip文件(可帶目錄)
思路:
ide
先判斷目的文件目錄是否存在,若是不存在,就建立;spa
判斷被壓縮的是文件仍是目錄ip
若是是文件,直接壓縮utf-8
若是是目錄,遍歷後逐一壓縮
ci
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os,zipfile def zip_compress(to_zip,save_zip_name):#save_zip_name是帶目錄的,也能夠不帶就是當前目錄 #1.先判斷輸出save_zip_name的上級是否存在(判斷絕對目錄),不然建立目錄 save_zip_dir=os.path.split(os.path.abspath(save_zip_name))[0]#save_zip_name的上級目錄 print(save_zip_dir) if not os.path.exists(save_zip_dir): os.makedirs(save_zip_dir) print('建立新目錄%s'%save_zip_dir) f = zipfile.ZipFile(os.path.abspath(save_zip_name),'w',zipfile.ZIP_DEFLATED) # 2.判斷要被壓縮的to_zip是否目錄仍是文件,是目錄就遍歷操做,是文件直接壓縮 if not os.path.isdir(os.path.abspath(to_zip)):#若是不是目錄,那就是文件 if os.path.exists(os.path.abspath(to_zip)):#判斷文件是否存在 f.write(to_zip) f.close() print('%s壓縮爲%s' % (to_zip, save_zip_name)) else: print ('%s文件不存在'%os.path.abspath(to_zip)) else: if os.path.exists(os.path.abspath(to_zip)):#判斷目錄是否存在,遍歷目錄 zipList = [] for dir,subdirs,files in os.walk(to_zip):#遍歷目錄,加入列表 for fileItem in files: zipList.append(os.path.join(dir,fileItem)) # print('a',zipList[-1]) for dirItem in subdirs: zipList.append(os.path.join(dir,dirItem)) # print('b',zipList[-1]) #讀取列表壓縮目錄和文件 for i in zipList: f.write(i,i.replace(to_zip,''))#replace是減小壓縮文件的一層目錄,即壓縮文件不包括to_zip這個目錄 # print('%s壓縮到%s'%(i,save_zip_name)) f.close() print('%s壓縮爲%s' % (to_zip, save_zip_name)) else: print('%s文件夾不存在' % os.path.abspath(to_zip))