用Python的multiprocessing模块完成(非多级)文件夹的复制
文件夹复制分为两部分:
第一部分是需要先创建一个同名的文件夹副本,来存储复制的所有文件,第二部分是用进程池来完成多任务同时对所有文件的复制操作。
在完成这两部分工作的基础上,可以自己加上一些其他的小功能,比如显示一个复制的进度,或者写成多级目录的下载也是可以的,我本人只是加了一个可以在命令行显示当前复制进度的小功能,是使用Queue实现的,代码如下:
import multiprocessing
import os
def copy_file(file_name, dir_name, copy_dir_name, q):
f_read = open(dir_name + "/" + file_name, "rb")
f_write = open(copy_dir_name + "/" + file_name, "wb")
f_write.write(f_read.read())
q.put(file_name)
f_read.close()
f_write.close()
def main():
dir_name = input("请输入需要复制的文件夹名:")
copy_dir_name = dir_name + "[副本]"
try:
os.mkdir(copy_dir_name)
except:
pass
file_list = os.listdir(dir_name)
q = multiprocessing.Manager().Queue(5)
po = multiprocessing.Pool(5)
for file_name in file_list:
po.apply_async(copy_file, args=(file_name, dir_name, copy_dir_name, q))
po.close()
len_list = len(file_list)
count = 0
while True:
q.get()
count += 1
print("\r下载中:%.2f%%" % (count * 100 / len_list), end="")
if count >= len_list:
break
if __name__ == "__main__":
main()