多任务文件夹复制

# --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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值