Python利用多线程Pool制作文件夹复制器

Linux以及MAC windows都自带有复制文件夹功能,但是最近感觉自带的复制效率真的很低,写了一个简易的多线程复制器,代码如下,运行条件是在linux,利用终端瞬间复制了170多个py文件,感觉效率很快,大文件等还没测试,不过相信我,windows自带的复制粘贴遇到了很多小文件且数量居多的时候,速度龟速,好了下面是代码,大文件等可以自己测试。

import multiprocessing
import os

def copy(file_name,copy_folder,copying_folder):
    for s in file_name:
        with open(copy_folder+s,'rb') as f:
            copy_data = f.read()
            x =  open(copying_folder+s,'wb')
            x.write(copy_data)
            x.close()

def main():
    # 因为需要拷贝的文件夹内容是不固定的,需要使用到进程池
    processes = multiprocessing.Pool(10)
    copy_folder = input("请输入你要拷贝的文件夹的绝对路径")
    # 获取到了用户需要拷贝的文件夹路径,可以利用os模块的listdir()返回所有文件列表
    file_name = os.listdir(copy_folder)
    copying_folder = input("请输入你要拷贝到的文件夹绝对路径")
    # 已经获取到需要待拷贝的文件夹
    # 需要判断该文件夹是否存在
    choice = os.path.exists(copying_folder)
    if choice == True:
        print("你输入的文件夹已经存在,是否继续")
        s = input("\t继续输入yes,退出输入exit:")
        if s == 'yes':
            processes.apply_async(copy,(file_name,copy_folder,copying_folder))
        else:
            exit(0)

    else:
        os.mkdir(copying_folder)
        processes.apply_async(copy,(file_name,copy_folder,copying_folder))
    processes.close()
    processes.join()



if __name__ == '__main__':
    main()

自己测试了一下,结果如下

1 运行时的代码(注意:此为linux(mac)下的路径方式,windows使用输入路径均为\\)

 

 2 test 文件夹内容展示

 

 3 运行结束test1文件夹

 

4 test1 里的详细内容

 

 

 

 

posted @ 2019-11-17 22:17  Oslo254804746  阅读(499)  评论(0)    收藏  举报