分享

用python实现复制大量文件

 乙甲壬 2020-07-06

  本来是去项目公司拷数据,结果去了发现有500G,靠系统的复制功能怕是得好几个小时,于是回来学一手操作,话不多说上代码:

说明:CopyFiles1是可以将sourceDir连子目录一起原样复制到targetDir,而CopyFiles2是在sourceDir中筛选特定格式文件,然后将其直接放在targetDir中,会很乱。。。但是很快

  1. import os
  2. import time
  3. import shutil
  4. sourceDir = r'D:\copytest\datatest'
  5. targetDir = r'D:\copytest\result'
  6. copyFileCounts = 0
  7. def CopyFiles1(sourceDir, targetDir):
  8. #完全连子目录也会复制好,美观
  9. global copyFileCounts
  10. print(sourceDir )
  11. print('%s 当前处理文件夹%s已处理%s 个文件' %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), sourceDir,copyFileCounts) )
  12. for f in os.listdir(sourceDir):
  13. sourceF = os.path.join(sourceDir, f)
  14. targetF = os.path.join(targetDir, f)
  15. if os.path.isfile(sourceF):
  16. if not os.path.exists(targetDir):
  17. os.makedirs(targetDir)
  18. copyFileCounts += 1
  19. if not os.path.exists(targetF) or (os.path.exists(targetF) and (os.path.getsize(targetF) != os.path.getsize(sourceF))):
  20. open(targetF, 'wb').write(open(sourceF, 'rb').read())
  21. print ('%s %s 复制完毕' %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF))
  22. else:
  23. print ('%s %s 已存在,不重复复制' %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF))
  24. if os.path.isdir(sourceF):
  25. copyFiles(sourceF, targetF)
  26. def CopyFiles2(dir):
  27. #会将目录下所有文件都复制在一起,速度快,可以筛选文件
  28. i=0
  29. for root,dir1,filename in os.walk(dir):
  30. #print(filename)
  31. for index in range(len(filename)):
  32. #print(os.path.splitext(filename[index])[1])
  33. #if os.path.splitext(filename[index])[1]=='.':#这里注意filename是个元组,splitext方法的时候只能是字符串
  34. if 1==1:
  35. #i+=1
  36. print('here')
  37. root1='D:\\copytest\\result3'
  38. old_path = os.path.join(root, filename[index])
  39. print(old_path)
  40. new_path = os.path.join(root1,filename[index])
  41. shutil.copyfile(old_path,new_path)
  42. #print('总共有',i,'图层文件被复制!')
  43. if __name__ == '__main__':
  44. time_start = time.time()
  45. try:
  46. import psyco
  47. psyco.profile()
  48. except ImportError:
  49. pass
  50. #CopyFiles1(sourceDir,targetDir)
  51. CopyFiles2('D:/copytest/datatest')
  52. time_end = time.time()
  53. print('totally cost', time_end - time_start)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约