import os import multiprocessing import time,random """ 文件拷贝器 1.取得源文件 2.直接命名目标文件夹,在原文件加[副本] 3.创建目标文件将爱 4.取得要拷贝的文件夹中的所有文件名 5.通过进程池去执行每一个文件拷贝任务 6.准备一个还是你好俗,实现文件拷贝任务 7.关闭进程池 8.执行完进程池中的所有任务 9.显示拷贝进度 """ def copy_file(source_files_name,dest_file_name,file_name,queue): # 1.打开源文件 # 文件夹/文件 read_file=open(source_files_name+'/'+file_name,"rb") # 2.创建或者打开目标文件 write_file=open(dest_file_name+"/"+file_name,"wb") # 3.循环读写数据 while True: time.sleep(random.random()) content=read_file.read() if content: write_file.write(content) else: break # 关闭文件 read_file.close() write_file.close() # 文件拷贝完了,将拷贝完的文件名发送到队列中 queue.put(file_name) # 显示拷贝进度 def copy_cate(file_names,queue): # 1.取得要拷贝文件的总数 total_nums=len(file_names) # 当前拷贝的文件数 copyed_nums=0 # 2.不断取得拷贝完的文件名 while True: copy_file_name = queue.get() copyed_nums +=1 # 3.不断显示拷贝进度 rate=copyed_nums/total_nums*100 print("\r正拷贝完的文件%s,当前的拷贝进度%0.2f%%"%(copy_file_name,rate),end='') # r若文件拷贝完成 if copyed_nums == total_nums: break def main(): # 文件路径 root_path="E:\Python复习" # 1.取得源文件夹 source_files_name = root_path+input("请输入要拷贝的文件夹:") # 2.直接命名目标文件夹,在源文件夹夹[副本] dest_files_name=source_files_name+'[副本]' # 3.创建文件夹 try: os.mkdir(dest_files_name) except: pass # 4.取得要拷贝的文件夹的所有文件名 file_names=os.listdir(source_files_name) # 5.通过进程池去执行每一个文件拷贝任务 # 创建队列 queue=multiprocessing.Manager().Queue() # 创建进程池 pool=multiprocessing.Pool() # 遍历文件列表 for file_name in file_names: pool.apply_async(func=copy_file,args=(source_files_name,dest_files_name,file_name,queue)) # 关闭进程池 pool.close() # 阻塞进程 # pool.join() # 显示拷贝进度 copy_cate(file_names,queue) if __name__ == '__main__': main()