文件夹拷贝器

    科技2022-07-16  105

    import multiprocessing import os def copy_file(q,file_name,old_folder_name,new_folder_name): """完成文件的复制""" # print("----模拟copy文件:从%s------到%s 文件名是:%s"%(old_folder_name,new_folder_name,file_name)) old_f = open(old_folder_name + '/' + file_name, 'rb') content=old_f.read() old_f.close() """写入文件""" new_f=open(new_folder_name+"/"+file_name,'wb') new_f.write(content) new_f.close() # 如果拷贝完文件就向队列中写入一个消息,表示已经完成 q.put(file_name) def main(): # 1.获取用户要copy的文件夹的名字 old_folder_name=input("请输入要复制的文件夹的名字:") # 2.创建一个新的文件夹 # 如果文件不存在则创建,存在就不创建,避免异常 try: new_folder_name=old_folder_name+"[复件]" os.mkdir(old_folder_name+"[复件]") except: pass # 3.获取文件夹的所有的待copy的文件名字 listdir() file_names=os.listdir(old_folder_name) print(file_names) # 4.创建进程池,主进程负责添加,进程池里的文件负责复制 po=multiprocessing.Pool(5) # 5.创建一个队列 q=multiprocessing.Manager().Queue() # 6 向进程池中添加copy文件的任务 for file_name in file_names: po.apply_async(copy_file,args=(q,file_name,old_folder_name,new_folder_name)) po.close() # po.join() all_file_num=len(file_names) # 测一下所有文件个数 copy_ok_num=0 # 获取拷贝的进度 while True: file_name=q.get() print("---已经完成copy: %s"% file_name) copy_ok_num+=1 print("拷贝的进度为:%.2f %%" %(copy_ok_num*100/all_file_num),end="") if copy_ok_num>=all_file_num: break # 获取原文件夹中的文件到新文件夹中的文件去 if __name__=="__main__": main()
    Processed: 0.010, SQL: 8