import os,sys
maxfileload =10000000
blksize = 1024*500
def copyfile(pathFrom,pathTo,maxfileload=maxfileload):
'''
将单个文件逐字节从pathFrom复制到pathTo;
使用二进制文件模式阻止Unicode解码及换行符转换。
'''
if os.path.getsize(pathFrom) <= maxfileload:
bytesFrom = open(pathFrom,'rb').read()
open(pathTo,'wb').write(bytesFrom)
else:
fileForm = open(pathFrom,'rb')
fileTo = open(pathTo,'wb')
while True:
bytesFrom = fileForm.read(blksize)
if not bytesFrom:break
fileTo.write(bytesFrom)
def copyTree(dirFrom,dirTo,verbose=0):
'''
将dirFrom下的内容复制到dirTo,返回文件目录,数目形式的元祖;
为避免在某些平台上目录名不可解码,可能需要为其名使用字节;
在Unix下可能需要更多文件类型检查:跳过链接,fifo之类。
'''
fcount = dcount = 0
for filename in os.listdir(dirFrom):
pathFrom = os.path.join(dirFrom,filename)
pathTo = os.path.join(dirTo,filename)
if not os.path.isdir(pathFrom):
try:
if verbose>=1:print('copying',pathFrom,'to',pathTo)
copyfile(pathFrom,pathTo)
fcount += 1
except:
print("复制出错,从",pathFrom,'到',pathTo )
print(sys.exc_info()[0],sys.exc_info()[1])
else:
if verbose: print('复制目录',pathFrom,'到',pathTo)
try:
os.mkdir(pathTo)
below = copyTree(pathFrom,pathTo)
fcount +=below[0]
dcount +=below[1]
dcount +=1
except:
print("复制出错",pathTo,'---skipped')
print(sys.exc_info()[0],sys.exc_info()[1])
return (fcount,dcount)
def getargs():
'''
获取并验证文件目录名参数,碰到错误是默认返回None
'''
try:
dirForm,dirTo = sys.argv[1:]
except:
print("参数错误,使用cpall.py 源文件夹名 目标文件夹名")
else:
if not os.path.isdir(dirForm):
print("错误:源文件夹不存在!")
elif not os.path.exists(dirTo):
os.mkdir(dirTo)
print("注意:创建了目标文件夹.")
return (dirForm,dirTo)
else:
print("警告:目标文件夹已存在")
if hasattr(os.path,'samefile'):
same = os.path.samefile(dirForm,dirTo)
else:
same = os.path.abspath(dirForm) == os.path.abspath(dirTo)
if same:
print("出错:目标文件和源文件一致")
else:
return (dirForm,dirTo)
if __name__ =="__main__":
import time
dirstuple = getargs()
if dirstuple:
print("开始复制........")
start = time.clock()
fcount,dcount = copyTree(*dirstuple)
print("copied",fcount,'files',dcount,'directories',end='')
print('in',time.clock()-start,'seconds')
python 复制文件
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 打开JUPYTER NOTEBOOK,新建一个空白的PY文档。如何用PYTHON复制文件和文件夹 import o...
- 本节主要分享的是利用python实现文件复制,延迟文件复制的详细的案例,通过本篇文章,你可以学习到很多的新方法,具...