python2.7实现复制大量文件及文件夹资料


Posted in Python onAugust 31, 2019

需求:拷大量数据,发现有2000G,靠系统的复制功能怕是得好几个小时,于是回来学一手操作,话不多说上代码:

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

import os
import time
import shutil
sourceDir = r"D:\copytest\datatest"
targetDir = r"D:\copytest\result"
copyFileCounts = 0
 
def CopyFiles1(sourceDir, targetDir):
#完全连子目录也会复制好,美观
 global copyFileCounts
 print(sourceDir )
 print("%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))):
 
    open(targetF, "wb").write(open(sourceF, "rb").read())
    print ("%s %s 复制完毕" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF))
   else:
    print ("%s %s 已存在,不重复复制" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF))
 
  if os.path.isdir(sourceF):
   copyFiles(sourceF, targetF)
 
def CopyFiles2(dir):
 #会将目录下所有文件都复制在一起,速度快,可以筛选文件
 i=0
 for root,dir1,filename in os.walk(dir):
  #print(filename)
  for index in range(len(filename)):
  #print(os.path.splitext(filename[index])[1])
  #if os.path.splitext(filename[index])[1]=='.':#这里注意filename是个元组,splitext方法的时候只能是字符串
  if 1==1:
   #i+=1
   print('here')
   root1="D:\\copytest\\result3"
   old_path = os.path.join(root, filename[index])
   print(old_path)
   new_path = os.path.join(root1,filename[index])
   shutil.copyfile(old_path,new_path)
 
#print("总共有",i,"图层文件被复制!")
 
if __name__ == "__main__":
 time_start = time.time()
 try:
 import psyco
 psyco.profile()
 except ImportError:
  pass
 #CopyFiles1(sourceDir,targetDir)
 CopyFiles2("D:/copytest/datatest")
 time_end = time.time()
 print('totally cost', time_end - time_start)
 
#实战代码
#!/usr/bin/python2
# coding=UTF-8
#@author neo_will
#version 2019-04-02 10:39
 
import os
import os.path
import shutil
import time, datetime
 
#fpath_2018 = [1207, 1121, 1120, 1119, 1112, 1101, 1025, 1009, 0704, 0608, 0531, 0530, 0517, 0502, 0418, 0330, 0201, 0131]
#sourceDir=r"F:\LEVEL2_shanghai\2018\fpath_2018[0:]"
#des_dir=r"G:\MarketDataSupplement\shanghai\2018\fpath_2018[0:]"
#原始目录和拷贝到的目录地址
sourceDir = r"D:\tools\wj"
targetDir = r"D:\Users\wj"
copyFileCounts = 0
 
#定义拷贝文件的函数
def copyFiles(sourceDir, targetDir):
 global copyFileCounts
 print (sourceDir )
 print ("%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))):
 #二进制文件
 open(targetF, "wb").write(open(sourceF, "rb").read())
 print u"%s %s copy over" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF)
 else:
  print("%s %s is exists,please don't copy more" %(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())), targetF))
 
 if os.path.isdir(sourceF):
 copyFiles(sourceF, targetF)
 
if __name__ == "__main__":
 time_start = time.time()
 try:
 import psyco
 psyco.profile()
 except ImportError:
 pass
 #copyFiles(sourceDir,targetDir)
 copyFiles(r"D:\tools\wj",r"D:\Users\wj")
 time_end = time.time()
 print('totally cost', time_end - time_start)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之大话题小函数(1)
Oct 10 Python
Python ftp上传文件
Feb 13 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
python3基于OpenCV实现证件照背景替换
Jul 18 Python
pycharm的console输入实现换行的方法
Jan 16 Python
在python中利用opencv简单做图片比对的方法
Jan 24 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
详解python中的异常捕获
Dec 15 Python
使用pandas模块实现数据的标准化操作
May 14 Python
python3实现高效的端口扫描
Aug 31 #Python
python nmap实现端口扫描器教程
May 28 #Python
Python3多线程版TCP端口扫描器
Aug 31 #Python
简单了解python协程的相关知识
Aug 31 #Python
利用rest framework搭建Django API过程解析
Aug 31 #Python
Python进度条的制作代码实例
Aug 31 #Python
python类的实例化问题解决
Aug 31 #Python
You might like
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
js 幻灯片的实现
2011/12/06 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
基python实现多线程网页爬虫
2015/09/06 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
Python3匿名函数用法示例
2018/07/25 Python
python实现flappy bird小游戏
2018/12/24 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
幼儿教师培训感言
2014/03/08 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏