环境:windows
一. 多进程实现文件多任务拷贝器
需求分析
1.判断目标文件夹是否存在,如果不存在就创建,存在则不创建
2.遍历源文件夹中所有文件,并拷贝到目标文件夹
3.采用进程实现多任务,并完成拷贝
实现步骤
1.定义源文件夹所在的路径,目标文件夹所在路径
2.创建目标文件夹
3.通过os.listdir获取源目录中的文件列表
4.遍历每个文件,定义一个函数,专门实现文件拷贝
5.采用进程实现多任务,完成高并发拷贝
import os
import multiprocessing
def copy_file(file_name, source_dir, dest_dir):
# 1 拼接源文件路径和目标文件路径
source_path = source_dir + '\' + file_name
dest_path = dest_dir + '\' + file_name
# 2 打开源文件和目标文件
with open(source_path, 'rb') as source_file:
with open(dest_path, 'wb') as dest_file:
# 3 循环读取源文件到目标路径
while True:
data = source_file.read(1024)
if data:
dest_file.write(data)
else:
break
if __name__ == '__main__':
# 1 定义源文件夹和目标文件夹
source_dir = r'C:UsersAdministratorDesktop7337428体系架构2.0'
dest_dir= r'C:UsersAdministratorDesktop1'
# 2.创建目标文件夹
try:
os.mkdir(dest_dir)
except:
print("目标文件夹已经存在")
# 3.读取源文件夹的文件列表
file_list = os.listdir(source_dir)
# 4.遍历文件列表实现拷贝
for file_name in file_list:
# 5.使用多进程实现多任务拷贝
sub_process = multiprocessing.Process(target=copy_file, args=(file_name, source_dir, dest_dir))
sub_process.start()
二.多线程实现文件多任务拷贝器
线程与进程的使用方法除了导入的包不同外,其它几乎完全一样,此处不再赘述。
import os
import threading
def copy_file(file_name, source_dir, dest_dir):
# 1 拼接源文件路径和目标文件路径
source_path = source_dir + '\' + file_name
dest_path = dest_dir + '\' + file_name
# 2 打开源文件和目标文件
with open(source_path, 'rb') as source_file:
with open(dest_path, 'wb') as dest_file:
# 3 循环读取源文件到目标路径
while True:
data = source_file.read(1024)
if data:
dest_file.write(data)
else:
break
if __name__ == '__main__':
# 1 定义源文件夹和目标文件夹
source_dir =r'C:UsersAdministratorDesktop7337428体系架构2.0'
dest_dir= r'C:UsersAdministratorDesktop1'
# 2.创建目标文件夹
try:
os.mkdir(dest_dir)
except:
print("目标文件夹已经存在")
# 3.读取源文件夹的文件列表
file_list = os.listdir(source_dir)
# 4.遍历文件列表实现拷贝
for file_name in file_list:
# copy_file(file_name, source_dir, dest_dir)
# 5.使用多线程实现多任务拷贝
sub_thread = threading.Thread(target=copy_file, args=(file_name, source_dir, dest_dir))
sub_thread.start()
注:在win环境下,书写文件路径时需在路径前面加上“r”,用来显式声明字符串不用转义,否则会发生以下报错。
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape



