Python实现拷贝/删除文件夹的方法详解


Posted in Python onAugust 29, 2018

本文实例讲述了Python实现拷贝 删除文件夹的方法。分享给大家供大家参考,具体如下:

1. 拷贝文件夹

from shutil import copytree, ignore_patterns
copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

注:shutil.copytree实现

def copytree(src, dst, symlinks=False, ignore=None):
  names = os.listdir(src)
  if ignore is not None:
    ignored_names = ignore(src, names)
  else:
    ignored_names = set()
  os.makedirs(dst)
  errors = []
  for name in names:
    if name in ignored_names:
      continue
    srcname = os.path.join(src, name)
    dstname = os.path.join(dst, name)
    try:
      if symlinks and os.path.islink(srcname):
        linkto = os.readlink(srcname)
        os.symlink(linkto, dstname)
      elif os.path.isdir(srcname):
        copytree(srcname, dstname, symlinks, ignore)
      else:
        copy2(srcname, dstname)
      # XXX What about devices, sockets etc.?
    except (IOError, os.error) as why:
      errors.append((srcname, dstname, str(why)))
    # catch the Error from the recursive copytree so that we can
    # continue with other files
    except Error as err:
      errors.extend(err.args[0])
  try:
    copystat(src, dst)
  except WindowsError:
    # can't copy file access times on Windows
    pass
  except OSError as why:
    errors.extend((src, dst, str(why)))
  if errors:
    raise Error(errors)

2. 删除文件夹

#! /usr/bash/python
# encoding:utf-8
import os
import os.path
import stat
import shutil
class DelDir:
 ''' 删除指定根目录下特定文件夹 '''
 def __init__(self, root, dirname):
 self.root = root
 self.dirname = dirname
 def run(self):
 for r, dirs, files in os.walk(self.root):
  if self.dirname in dirs:
  srcDir = os.path.join(r, self.dirname)
  #更改权限(win7会出现权限问题)
  os.chmod(srcDir, stat.S_IREAD | stat.S_IWRITE)
  result = shutil.rmtree(srcDir, False, self.__handler)
  print "%s" %(srcDir)
 def __handler(self, function, path, excinfo):
 ''' 删除出错处理 '''
 #更改权限(win7会出现权限问题)
 os.chmod(path, stat.S_IREAD | stat.S_IWRITE)
 function(path)
 print "[Handler] ==> Path:%s \n\tHandler the Error: %s" %(path, excinfo)
if __name__ == '__main__':
 rootdir = r"E:\workspace\minioffice\mini-core\src\main\webapp" # 需要处理的文件夹
 rootdir = unicode(rootdir, "utf8")
 dirname = ".svn" # 删除的文件夹
 c = DelDir(rootdir, dirname)
 c.run()

Python实现文件夹递归拷贝

目标:

1.多层文件夹嵌套,在要备份的文件夹中嵌套多个文件夹

2.增量备份,因为文件较多,且之前已有部分备份,所以只需对新增的文件进行备份,提升效率

Python安装:

1.下载安装包,http://www.python.org/getit/,可以选择Python2或3,2的兼容性更好

2.添加Python安装目录如D:\Program\Python到环境变量Path中

编写脚本:

Python中自身有文件夹拷贝的API,但有诸多限制,不能满足需求,所以自己实现

要点有两个:

1.递归拷贝,因为有多层嵌套文件夹,所以用递归实现
2.错误处理,要考虑文件夹不存在的情况

脚本如下:

###################################################### -*- coding: GBK -*-
# 文件自动备份脚本
# 作者:阿凡提
import os
import shutil
# 设置待备份的源文件夹及存放备份文件的目标文件夹
srcDir = "f:\\src"
dstDir = "f:\\dst"
# 目录递归拷贝函数
def dir_copyTree(src, dst):
  names = os.listdir(src)
  # 目标文件夹不存在,则新建
  if not os.path.exists(dst):
    os.mkdir(dst)
  # 遍历源文件夹中的文件与文件夹
  for name in names:
    srcname = os.path.join(src, name)
    dstname = os.path.join(dst, name)
    try:
      # 是文件夹则递归调用本拷贝函数,否则直接拷贝文件
      if os.path.isdir(srcname):
        dir_copyTree(srcname, dstname)
      else:
        if (not os.path.exists(dstname)
          or ((os.path.exists(dstname))
            and (os.path.getsize(dstname) != os.path.getsize(srcname)))):
          print dstname
          shutil.copy2(srcname, dst)
    except:
      error.traceback();
      raise
# 备份函数
def dir_backup():
  global srcDir
  global dstDir
  print "源文件夹" + srcDir
  print "目标文件夹" + dstDir
  print "本次拷贝文件:"
  dir_copyTree(srcDir, dstDir)
  # 将此句注释则会一闪而过,方便自动备份
  raw_input ("备份完成")
# 执行备份函数
dir_backup()
#####################################################

结合Windows的任务计划程序定时运行此脚本,即可实现自动备份的目的。

python 文件夹复制加强版

shutil模块主要用于文件夹的操作。其中copytree用来对文件夹进行复制,但是比较遗憾的是,如果目标文件已经存在的话,该函数就会报错抛异常了,非常地不给力。求人不如求已,看到帮助文档中有此方法的源码,就修改了一下,使其默认可以支持文件和文件夹的覆盖。

import os
import os.path
import shutil
def copytree(src, dst, symlinks=False):
  names = os.listdir(src)
  if not os.path.isdir(dst):
    os.makedirs(dst)
  errors = []
  for name in names:
    srcname = os.path.join(src, name)
    dstname = os.path.join(dst, name)
    try:
      if symlinks and os.path.islink(srcname):
        linkto = os.readlink(srcname)
        os.symlink(linkto, dstname)
      elif os.path.isdir(srcname):
        copytree(srcname, dstname, symlinks)
      else:
        if os.path.isdir(dstname):
          os.rmdir(dstname)
        elif os.path.isfile(dstname):
          os.remove(dstname)
        shutil.copy2(srcname, dstname)
      # XXX What about devices, sockets etc.?
    except (IOError, os.error) as why:
      errors.append((srcname, dstname, str(why)))
    # catch the Error from the recursive copytree so that we can
    # continue with other files
    except OSError as err:
      errors.extend(err.args[0])
  try:
    copystat(src, dst)
  except WindowsError:
    # can't copy file access times on Windows
    pass
  except OSError as why:
    errors.extend((src, dst, str(why)))
  if errors:
    raise Error(errors)
if __name__ == '__main__':
  copytree('E:/book', 'E:/newbook')

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中用于转换字母为小写的lower()方法使用简介
May 19 Python
python中字符串前面加r的作用
Jun 04 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
python使用装饰器作日志处理的方法
Jul 11 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
python和node.js生成当前时间戳的示例
Sep 29 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
Python图像处理库PIL详细使用说明
Apr 06 Python
Python读写zip压缩文件的方法
Aug 29 #Python
使用python生成杨辉三角形的示例代码
Aug 29 #Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 #Python
有关Python的22个编程技巧
Aug 29 #Python
Python实现多线程的两种方式分析
Aug 29 #Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 #Python
python单例模式实例解析
Aug 28 #Python
You might like
php生成EXCEL的东东
2006/10/09 PHP
实用函数4
2007/11/08 PHP
PHP 在线翻译函数代码
2009/05/07 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php格式化金额函数分享
2015/02/02 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
python实现自动重启本程序的方法
2015/07/09 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
浅谈python之新式类
2018/08/12 Python
Python中的 enum 模块源码详析
2019/01/09 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis