11-案例:进程版文件夹copy器

目标

  • 使用进程实现文件夹 整体 拷贝到另外一个目录

1.案例介绍

image-20180822112051695

2. 案例效果

multiprocess_copy

3. 实现步骤

案例的目标:

源文件夹                        目标文件夹

    ./test/     -------------->   /home/teacher/桌面/test/

1、定义源文件所在的文件、目标文件夹

2、创建目标文件夹

3、通过os.listdir 获取源目录中的文件列表

4、遍历每个文件

5、定义一个函数,专门实现文件拷贝(任务: 进程池实现)

文件拷贝函数:

1、拼接源文件和目标文件所在的路径

2、打开源文件、创建目标文件

3、读取源文件的内容并且写入到目标文件中(循环)

4. 案例代码

import multiprocessing
import os


# file_name 文件名
# source_dir 源文件目录
# dest_dir 目标文件目录
def copy_work(file_name, source_dir, dest_dir):

    # 拼接路径
    source_path = source_dir+"/"+file_name

    dest_path = dest_dir+"/"+file_name

    print(source_path, "----->", dest_path)
    # 打开源文件、创建目标文件
    with open(source_path,"rb") as source_file:
        with open(dest_path,"wb") as dest_file:
            while True:
                # 循环读取数据
                file_data = source_file.read(1024)
                if file_data:
                    # 循环写入到目标文件
                    dest_file.write(file_data)
                else:
                    break


if __name__ == '__main__':

    # 1、定义源文件目录和目标文件夹的目录
    source_dir = "test"
    dest_dir = "/home/teahcer/桌面/test"

    try:
        # 2、创建目标文件夹目录
        os.mkdir(dest_dir)

    except:
        print("目标文件夹已经存在,未创建~")

    # 3、列表得到所有的源文件中的文件
    file_list = os.listdir(source_dir)
    print(file_list)

    # 4、创建进程池
    pool = multiprocessing.Pool(3)
    # 5、for 循环,依次拷贝每个文件
    for file_name in file_list:
        # copy_work(file_name, source_dir, dest_dir)
        pool.apply_async(copy_work, args=(file_name, source_dir, dest_dir))
    # 6、关闭进程池
    pool.close()
    # 7、设置主进程等待子进程执行结束再退出
    pool.join()