多任务文件夹复制
1.获取用户要复制的文件夹名字
2.创建一个新的文件夹
3.获取文件夹的所有待拷贝的文件名字 读取文件再写入新的文件
4.创建进程池
5.添加拷贝任务
import multiprocessing
import os
def copy_file(file_name,new_file_name,old_file_name):
'''完成文件拷贝'''
print('拷贝的文件名称为:%s' % file_name)
with open(old_file_name + "/" + file_name,"rb") as f:
content = f.read()
# old_file = open(old_file_name + "/" + file_name,"rb")
# content = old_file.read()
# old_file.close()
# 保存到新的文件夹中
new_file = open(new_file_name + "/" + file_name,"wb")
new_file.write(content)
new_file.close()
def main():
# 获取用户要复制的文件夹名字
old_file_name = input("请输入要复制的文件夹名字:")
# 创建一个新的文件夹 test[复件]
new_file_name = old_file_name + "复件"
if not os.path.exists(new_file_name):
os.mkdir(new_file_name)
# 获取文件夹待拷贝的文件名字 读文件再写
file_names = os.listdir(old_file_name)
print(file_names)
# 创建进程池
po = multiprocessing.Pool(5)
# 添加拷贝任务
for file_name in file_names:
po.apply_async(copy_file,args=(file_name,new_file_name,old_file_name))
po.close()
po.join()
if __name__ == '__main__':
main()
将以上代码优化成进度条方式:
import multiprocessing
import os
def copy_file(q,file_name,new_file_name,old_file_name):
'''完成文件拷贝'''
# print('拷贝的文件名称为:%s' % file_name)
with open(old_file_name + "/" + file_name,"rb") as f:
content = f.read()
# old_file = open(old_file_name + "/" + file_name,"rb")
# content = old_file.read()
# old_file.close()
# 保存到新的文件夹中
with open(new_file_name + "/" + file_name,"wb") as f:
content = f.write(content)
# new_file = open(new_file_name + "/" + file_name,"wb")
# new_file.write(content)
# new_file.close()
q.put(file_name)
def main():
# 获取用户要复制的文件夹名字
old_file_name = input("请输入要复制的文件夹名字:")
# 创建一个新的文件夹 test[复件]
new_file_name = old_file_name + "复件"
if not os.path.exists(new_file_name):
os.mkdir(new_file_name)
# 获取文件夹待拷贝的文件名字 读文件再写
file_names = os.listdir(old_file_name)
# print(file_names)
# 创建进程池
po = multiprocessing.Pool(5)
# 创建队列
q = multiprocessing.Manager().Queue()
# 添加拷贝任务
for file_name in file_names:
po.apply_async(copy_file,args=(q,file_name,new_file_name,old_file_name))
po.close()
# 文件总数
file_count = len(file_names)
copy_file_num = 0
while True:
file_name = q.get()
copy_file_num += 1
# 拷贝的进度 1%
# print("\r拷贝的进度%2.f%%" % (copy_file_num*100/file_count),end="")
print("拷贝的进度%2.f%%" % (copy_file_num*100/file_count))
if copy_file_num >= file_count:
break
# po.join() # 表示等
if __name__ == '__main__':
main()