使用进程实现文件夹的整体拷贝

234 阅读1分钟

使用进程实现文件夹的整体拷贝。在拷贝文件夹的文件时,如果文件夹中的文件很多,那么一个一个拷贝,效率会很低下,那么可以使用多任务的形式来实现文件夹下的文件进行同时拷贝,提高拷贝效率。(例如源目录:/Users/KG/Desktop/test;目标目录:/Users/KG/Desktop/test_copy)

import multiprocessing
import os
​
​
def copy_single_file(src_file, dest_file):
    """复制拷贝单个文件
    :param src_file: 要拷贝的源文件
    :param dest_file: 复制之后的文件
    :return: None
    """
    # 读打开原文件
    f_r = open(src_file, 'rb')
    # 写打开新文件
    f_w = open(dest_file, 'wb')
    # 将原文件中的内容写入到新文件中,防止文件太大,使用循环读取
    while True:
        buf = f_r.read(1024)
        if len(buf) != 0:
            f_w.write(buf)
        else:
            break
    f_r.close()
    f_w.close()
    # 输出拷贝的信息,相当于是 cp的 -v 参数
    print(f"{src_file} -> {dest_file}")
​
​
def my_copy(src, dest):
    """ 目录拷贝
    :param src: 要拷贝的目录
    :param dest:  拷贝后的目录名
    :return: None
    """
    # 判断目标目录是否存在,存在直接使用,不存在,创建
    if not os.path.exists(dest):
        os.mkdir(dest)
​
    # 获取目录中的所有文件
    file_list = os.listdir(src)
    for i in file_list:
        sub_process = multiprocessing.Process(target=copy_single_file, args=(src+'/'+i, dest + "/" + i))
        sub_process.start()
​
​
if __name__ == '__main__':
    # src_dir = input('请输入要拷贝的原目录')
    src_dir = "D:\pythonProject"
    if os.path.exists(src_dir):
        dest_dir = src_dir + '_copy'  # pythonPrpject_copy
        my_copy(src_dir, dest_dir)
    else:
        print('输入的目录信息不存在')