多任务文件夹复制

多任务文件夹复制
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()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值