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实例分享:快速查找出被挂马的文件
Jun 08 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
Python统计单词出现的次数
Apr 04 Python
python删除不需要的python文件方法
Apr 24 Python
基于python神经卷积网络的人脸识别
May 24 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
python中sleep函数用法实例分析
2015/04/29 Python
为Python程序添加图形化界面的教程
2015/04/29 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
python计算文本文件行数的方法
2015/07/06 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
Gap工厂店:Gap Factory
2017/11/02 全球购物
高级销售员求职信
2013/10/25 职场文书
加入学生会自荐书
2015/03/05 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
我是特种兵观后感
2015/06/11 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
Go语言基础知识点介绍
2021/07/04 Golang