import os
import multiprocessing
def copy_file(q, file_name, old_folder_name, new_folder_name):
"""完成文件的复制"""
# 判断该路径下的名字是否是文件类型
if os.path.isfile(old_folder_name + "/" + file_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)
else:
q.put(file_name)
old_folder_name = old_folder_name + "/" + file_name
try:
new_folder_name = new_folder_name + "/" + file_name + "[复件]"
os.mkdir(new_folder_name)
except:
pass
# 获取文件夹的所有的待copy的文件名字 listdir()
file_names = os.listdir(old_folder_name)
# 创建进程池
po = multiprocessing.Pool(5)
# 向进程池中添加 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()
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)
# 4.1创建队列
q = multiprocessing.Manager().Queue()
# 5. 向进程池中添加 copy文件的任务
for file_name in file_names:
po.apply_async(copy_file, args=(q, file_name, old_folder_name, new_folder_name))
po.close()
file_num = len(file_names) # 得到文件的总数量
copy_num = 0 # 拷贝完成的文件数量
while True:
file_name = q.get()
if file_name in file_names:
copy_num += 1
print("\r拷贝进度%.2f%%" % (copy_num * 100 / file_num), end="")
if copy_num >= file_num:
break
if __name__ == "__main__":
main()
利用进程进行文件复制
最新推荐文章于 2022-11-15 17:32:44 发布