利用 Python 多进程 简单实现 文件夹中多个文件的复制
代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import multiprocessing
import os
import time
def copy_file(q, file_name, old_folder_name, new_folder_name):
"""完成文件的复制"""
# print('正在完成从%s到%s的复制' % (old_folder_name, new_folder_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():
# 获取用户要copy的文件夹的名字
old_folder_name = input('请输入要copy的文件夹的名字:')
# 创建一个新的文件夹
try:
new_folder_name = old_folder_name + '[复件]'
os.mkdir(new_folder_name)
except:
pass
# 获取文件夹中所有的文件的名字 listdir()
file_names = os.listdir(old_folder_name)
# print(file_names)
# 创建进程池, 最大进程数为5
po = multiprocessing.Pool(5)
# 创建一个队列
q = multiprocessing.Manager().Queue()
# 向进程池中添加 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_file_num = 0
while True:
# file_name = q.get()
# print("已经完成copy:%s" % file_name)
copy_file_num += 1
time.sleep(1) # 由于文件太小, 模拟感受一下进度条的效果
print('\r当前拷贝的进度为:{:.2%}'.format(copy_file_num / all_file_num), end='')
if copy_file_num >= all_file_num:
break
if __name__ == '__main__':
main()