#! /usr/bin/env python
# -*- coding: utf-8 -*-
#@author zcwang3@gmail.com
#@version 2010-09-25 14:57
import os
import time
sourceDir = r"\\192.168.3.250\mmtimages"
targetDir = r"D:\mmtimages"
copyFileCounts = 0
def copyFiles(sourceDir, targetDir):
global copyFileCounts
print sourceDir
print u"%s 当前处理文件夹%s已处理%s 个文件" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), sourceDir,copyFileCounts)
for f in os.listdir(sourceDir):
sourceF = os.path.join(sourceDir, f)
targetF = os.path.join(targetDir, f)
if os.path.isfile(sourceF):
#创建目录
if not os.path.exists(targetDir):
os.makedirs(targetDir)
copyFileCounts += 1
#文件不存在,或者存在但是大小不同,覆盖
if not os.path.exists(targetF) or (os.path.exists(targetF) and (os.path.getsize(targetF) != os.path.getsize(sourceF))):
#2进制文件
open(targetF, "wb").write(open(sourceF, "rb").read())
print u"%s %s 复制完毕" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF)
else:
print u"%s %s 已存在,不重复复制" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF)
if os.path.isdir(sourceF):
copyFiles(sourceF, targetF)
if __name__ == "__main__":
try:
import psyco
psyco.profile()
except ImportError:
pass
copyFiles(sourceDir,targetDir)
分享到:
2010-09-25 14:58
浏览 4800
论坛回复 / 浏览 (3 / 5874)
评论
3 楼
Xorcerer
2010-10-08
让我想起rsync。
2 楼
desert3
2010-09-29
用python写的程序发现每秒大概能复制6 7 个图片文件(每个100k左右)
后来找到工具FastCopy,每秒大概能复制11个左右,速度更快,还有一些容错的功能
就直接用FastCopy,上面的代码就放弃了
1 楼
sikeh
2010-09-26
distutils.dir_util.copy_tree does what you want.
Copy an entire directory tree src to a new location dst. Both src and dst must be directory names. If src is not a directory, raise DistutilsFileError. If dst does not exist, it is created with mkpath(). The end result of the copy is that every file in src is copied to dst, and directories under src are recursively copied to dst. Return the list of files that were copied or might have been copied, using their output name. The return value is unaffected by update or dry_run: it is simply the list of all files under src, with the names changed to be under dst.