目的:将一个文件夹里文件全部copy到新的文件夹中
大纲: 1、获取用户要复制的文件夹名字
2、创建一个新的文件夹
3、获取文件夹的所有待复制的文件的名字
4、创建进程池
5、创建队列
6、向进程池中添加复制文件的任务
7、显示进度条
import os
import multiprocessing
def copy_file(q, file_name, old_folder_name, new_folder_name):
"""完成文件的复制"""
# 一个一个文件读取
with open(old_folder_name + "/" + file_name, "rb") as old_f:
content = old_f.read()
# 将读取的文件一个一个写入
with open(new_folder_name + "/" + file_name, "wb") as new_f:
new_f.write(content)
# 如果拷贝完了文件,那么就向队列中写入一个消息,表示已经完成
q.put(file_name)
def main():
# 1.获取用户要copy的文件夹的名字
old_folder_name = input('请输入要copy的文件夹的名字:')
# 2.创建一个新的文件夹
try:
new_folder_name = old_folder_name + "[复件]"
os.mkdir(new_folder_name)
except:
pass
# 3.获取文件夹的所有的待copy的文件名字 listdir()
file_names = os.listdir(old_folder_name)
# 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_down_num = 0
while True:
q.get()
copy_down_num += 1
print('\r拷贝的进度为:%.2f %%' % (copy_down_num * 100 / all_file_num), end='')
if copy_down_num == all_file_num:
break
if __name__ == '__main__':
main()
结果: