# --coding=utf-8--
import os
import multiprocessing
def main():
# 1.获取用户要copy的文件夹的名字
old_folder_name = raw_input("请输入要copy的文件夹的名字: ")
# 2.创建一个新的文件夹,获取try: except: pass,出现文件夹已存在则啥也不干
#if not os.path.exists(old_folder_name + "[copy]"):
try:
new_folder_name = old_folder_name + "[copy]"
os.mkdir(new_folder_name)
except:
pass
# 3.获取文件夹的所有待copy的文件名字
file_list = os.listdir(old_folder_name)
#print(file_list)
# 4.创建进程池
pool = multiprocessing.Pool(3)
# 5.创建一个queue,用于主线程和线程池中的子进程进行通信
queue = multiprocessing.Manager().Queue()
# 6.复制原文件夹中的文件到新文件夹中
for file_name in file_list:
pool.apply_async(copy_file, args = (queue, file_name, old_folder_name, new_folder_name))
pool.close()
# pool.join() # 等待进程池中的子进程全部执行完
# 主进程显示进度
all_file_num = len(file_list)
while True:
fileName = queue.get()
if fileName in file_list:
file_list.remove(fileName) # 删除已经拷贝结束的文件
copy_rate = (all_file_num - len(file_list))*100/all_file_num
print("\r%.2f.......(%s)" % (copy_rate, fileName) +" "*50)
if copy_rate >=100:
break
def copy_file(queue, file_name, old_folder_name, new_folder_name):
file_path = os.path.join(old_folder_name, file_name)
#print(file_path)
old_file= open(file_path)
#print(old_file.read())
while True:
content = old_file.read(1024)
if not content:
break
old_file.close()
new_file_path = os.path.join(new_folder_name, file_name)
#print(new_file_path)
new_file = open(new_file_path, "wb")
new_file.write(content)
new_file.close()
#发送拷贝完毕的文件名字
queue.put(file_name)
#print(file_name)
if __name__ == "__main__":
main()