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使用递归解决全排列数字示例
Feb 11 Python
Python获取单个程序CPU使用情况趋势图
Mar 10 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
python实现下载整个ftp目录的方法
Jan 17 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
python用for循环求和的方法总结
Jul 08 Python
django连接oracle时setting 配置方法
Aug 29 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
django和flask哪个值得研究学习
Jul 31 Python
python import 上级目录的导入
Nov 03 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+SqlServer实现分页显示
2006/10/09 PHP
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Python struct模块解析
2014/06/12 Python
python实现的简单文本类游戏实例
2015/04/28 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
python实现redis三种cas事务操作
2017/12/19 Python
物理系毕业生自荐信
2013/11/01 职场文书
初一科学教学反思
2014/01/27 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
员工工作表现评语
2014/04/26 职场文书
道路施工安全责任书
2014/07/24 职场文书
班主任高考寄语
2015/02/26 职场文书
团队拓展训练感想
2015/08/07 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
总结Python连接CS2000的详细步骤
2021/06/23 Python
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server