免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3825 | 回复: 3
打印 上一主题 下一主题

python文件夹复制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-20 14:18 |只看该作者 |倒序浏览
需求:复制1个10多个G的文件夹(另外机器共享过来的文件夹,里面含有约10w个文件)到本机一个目录(另外那台机器磁盘满了的原因)

使用windows的文件夹复制,发现经常在复制一部分文件后,因某些莫名其妙的原因被中断(提示某个文件复制失败,网络被断开,可能是由于网络不稳定),然后就要从头再来,搞了几个小时还没有搞完,烦死

就想到用python写个脚本来做这个事情:文件已经存在并且大小一致时不重复复制加快处理速度

代码如下
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #@author zcwang3@gmail.com
  4. #@version 2010-09-25 14:57

  5. import os
  6. import time

  7. sourceDir = r"\\192.168.3.250\mmtimages"
  8. targetDir = r"D:\mmtimages"
  9. copyFileCounts = 0

  10. def copyFiles(sourceDir, targetDir):
  11.     global copyFileCounts
  12.     print sourceDir
  13.     print u"%s 当前处理文件夹%s已处理%s 个文件" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), sourceDir,copyFileCounts)
  14.     for f in os.listdir(sourceDir):
  15.         sourceF = os.path.join(sourceDir, f)
  16.         targetF = os.path.join(targetDir, f)
  17.               
  18.         if os.path.isfile(sourceF):
  19.             #创建目录
  20.             if not os.path.exists(targetDir):
  21.                 os.makedirs(targetDir)
  22.             copyFileCounts += 1
  23.             
  24.             #文件不存在,或者存在但是大小不同,覆盖
  25.             if not os.path.exists(targetF) or (os.path.exists(targetF) and (os.path.getsize(targetF) != os.path.getsize(sourceF))):
  26.                 #2进制文件
  27.                 open(targetF, "wb").write(open(sourceF, "rb").read())
  28.                 print u"%s %s 复制完毕" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF)
  29.             else:
  30.                 print u"%s %s 已存在,不重复复制" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF)
  31.         
  32.         if os.path.isdir(sourceF):
  33.             copyFiles(sourceF, targetF)
  34.         
  35. if __name__ == "__main__":
  36.     try:
  37.         import psyco
  38.         psyco.profile()
  39.     except ImportError:
  40.         pass
  41.     copyFiles(sourceDir,targetDir)
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-04-21 10:44 |只看该作者
话说有个工具叫robocopy

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
3 [报告]
发表于 2011-04-22 08:33 |只看该作者
可以用rsync工具,有windows版的

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
4 [报告]
发表于 2011-04-22 17:37 |只看该作者
没用过同步工具么orz
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP