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 装饰器功能以及函数参数使用介绍
Jan 27 Python
python从sqlite读取并显示数据的方法
May 08 Python
python中map()与zip()操作方法
Feb 27 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
python读取指定字节长度的文本方法
Aug 27 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
python 实现两个npy档案合并
Jul 01 Python
如何利用Python实现一个论文降重工具
Jul 09 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
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
Numpy数组的广播机制的实现
2020/11/03 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
班组长工作职责
2013/12/25 职场文书
优秀党员获奖感言
2014/02/18 职场文书
美术教学感言
2014/02/22 职场文书
产品售后服务承诺书
2014/05/21 职场文书
教师个人考察材料
2014/12/16 职场文书