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") # 注意:这个压缩后的文件名不要随意更改,否则删除自身文件后自负!!