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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。