linux 下python多线程递归复制文件夹及文件夹中的文件
本文是利用python复制文件夹刚开始写了一个普通的递归复制文件夹 然后想了想觉得对io频繁的程序threading线程还比较友好 就写了个多线程版本的 最恶心人的地方就是路径 其他都还好吧
importos importthreading importmultiprocessing length_of_folder=0 defcopyfile(Path): ifos.path.isdir(Path): print("-----------%s"%("Testfortherading_"+'/'+Path[length_of_folder:])) os.makedirs("Testforthreading_"+'/'+Path[length_of_folder:]) filenames=os.listdir(Path) forfilenameinfilenames: ifos.path.isdir(Path+'/'+filename): #ps="Testforthreading_"+"/"+Path[length_of_folder:] #print("%s"%(ps+'/'+filename)) #os.mkdir(ps+'/'+filename) temp=Path+'/'+filename t=threading.Thread(target=copyfile,args=(temp,)) t.start() else: f=open(Path+'/'+filename,'rb') content=f.read() F=open('Testforthreading_'+'/'+Path[length_of_folder:]+'/'+filename,'wb') F.write(content) f.close() F.close() defmain(): """""" foldername=input("Pleaseinputthefolderyouwanttocopy:") length_of_folder=len(foldername) ifos.path.isdir("Testforthreading_"): os.removedirs("Testforthreading_") os.mkdir("Testforthreading_") copyfile(foldername) #p=multiprocessing.Pool(10) #que=multiprocessing.Manager().Queue() if__name__=="__main__": main()
ps:Python多进程递归复制文件夹中的文件
importmultiprocessing importos importreimporttime #源文件夹地址、目标文件夹地址 SOUR_PATH="" DEST_PATH="" #源文件列表文件夹列表 SOUR_FILE_LIST=list() SOUR_DIR_LIST=list() deftraverse(source_path): """递归遍历源文件夹,获取文件夹列表、文件列表 :paramsource_path:用户指定的源路径 """ ifos.path.isdir(source_path): SOUR_DIR_LIST.append(source_path) fortempinos.listdir(source_path): new_source_path=os.path.join(source_path,temp) traverse(new_source_path) else: SOUR_FILE_LIST.append(source_path) defcopy_files(queue,sour_file,dest_file): """复制文件列表中的文件到指定文件夹 :paramqueue:队列,用于监测进度 :paramsour_file: :paramdest_file: """ #time.sleep(0.1) try: old_f=open(sour_file,"rb") new_f=open(dest_file,"wb") exceptExceptionasret: print(ret) else: content=old_f.read() new_f.write(content) old_f.close() new_f.close() queue.put(sour_file) defmain(): source_path=input("请输入需要复制的文件夹的路径:\n") SOUR_PATH=source_path DEST_PATH=SOUR_PATH+"[副本]" #dest_path=input("请输入目标文件夹路径") #DEST_PATH=dest_path print(">>>源文件夹路径:",SOUR_PATH) print(">目标文件夹路径:",DEST_PATH) print("开始计算文件...") queue=multiprocessing.Manager().Queue() po=multiprocessing.Pool(5) traverse(source_path) print("创建目标文件夹...") forsour_dirinSOUR_DIR_LIST: dest_dir=sour_dir.replace(SOUR_PATH,DEST_PATH) try: os.mkdir(dest_dir) exceptExceptionasret: print(ret) else: print("\r目标文件夹%s创建成功"%DEST_PATH,end="") print() print("开始复制文件") forsour_fileinSOUR_FILE_LIST: dest_file=sour_file.replace(SOUR_PATH,DEST_PATH) po.apply_async(copy_files,args=(queue,sour_file,dest_file)) count_file=len(SOUR_FILE_LIST) count=0 whileTrue: q_sour_file=queue.get() ifq_sour_fileinSOUR_FILE_LIST: count+=1 rate=count*100/count_file print("\r文件复制进度:%.2f%%%s"%(rate,q_sour_file),end="") ifrate>=100: break print() ret=re.match(r".*\\([^\\]+)",SOUR_PATH) name=ret.group(1) print("文件夹%s复制完成"%name) if__name__=='__main__': main()
总结
以上所述是小编给大家介绍的linux下python多线程递归复制文件夹及文件夹中的文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。