ZIP模块--用于压缩多个文件或目录

import os
import shutil


def copy_and_zip(file_list, dst_folder_name):
   '''
   批量复制文件到指定文件夹,然后把指定文件夹的内容压缩成ZIP并且删掉该文件夹
   :param file_list: 文件或文件夹
   :param dst_folder_name: 目标压缩文件的名称
   :return:
   '''
   source = os.path.join(os.getcwd(), dst_folder_name)
   if os.path.isfile(source+".zip"):
       print('aaa')
       os.remove(source+".zip")  # 删除 dst_folder_name 文件,避免数据重复
   for item in file_list:
       copy_file(item, dst_folder_name)

   # 这里我把输出文件的路径选到了程序根目录下

   print(source)
   shutil.make_archive(source, "zip", source)
   shutil.rmtree(source) # 删除


def copy_file(srcfile, filename):
   '''
   把文件或文件夹复制到指定目录中
   :param srcfile: 文件或者文件夹的绝对路径
   :param filename: 指定目录
   :return:
   '''
   dstfile = os.path.abspath(os.getcwd())
   # 这里我把输出文件的路径选到了程序根目录下
   folder_name = dstfile + os.sep + filename + os.sep
   if not os.path.isfile(srcfile):
       last_name = os.path.basename(srcfile)
       destination_name = folder_name + last_name
       shutil.copytree(srcfile, destination_name)
       print("copy %s -> %s" % (srcfile, destination_name))
   else:
       fpath, fname = os.path.split(folder_name)  # 分离文件名和路径
       if not os.path.exists(fpath):
           os.makedirs(fpath)  # 创建路径
       shutil.copy2(srcfile, folder_name)  # 移动文件
       print("copy %s -> %s" % (srcfile, folder_name))

class ZIP:
   def __init__(self,file_list:list,folder_name):
       copy_and_zip(file_list, folder_name)


if __name__ == '__main__':
   # 压缩后文件路径到程序根目录下
   # file_list为字典,可以是多个文件或目录
   file_list = [r"F:\Django\xqyunpan\data\101.jpg",r"F:\Django\xqyunpan\data\build.txt"]
   ZIP(file_list,"dst_folder_name") # 注意:这个压缩后的文件名不要随意更改,否则删除自身文件后自负!!
posted @ 2019-05-20 21:41  代码创造一切  阅读(1481)  评论(0编辑  收藏  举报