使用进程实现文件夹的整体拷贝。在拷贝文件夹的文件时,如果文件夹中的文件很多,那么一个一个拷贝,效率会很低下,那么可以使用多任务的形式来实现文件夹下的文件进行同时拷贝,提高拷贝效率。(例如源目录:/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('输入的目录信息不存在')