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实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
Django框架实现的简单分页功能示例
Dec 04 Python
对python 读取线的shp文件实例详解
Dec 22 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
win10从零安装配置pytorch全过程图文详解
May 08 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
Django之腾讯云短信的实现
Jun 12 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
python高级特性简介
Aug 13 Python
Django rest framework分页接口实现原理解析
Aug 21 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
js实现楼层导航功能
2017/02/23 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
Python实现将xml导入至excel
2015/11/20 Python
Python之循环结构
2019/01/15 Python
python写一个随机点名软件的实例
2019/11/28 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
回门宴父母答谢词
2014/01/26 职场文书
2015年考研复习计划
2015/01/19 职场文书
员工自我评价范文
2015/03/11 职场文书
外出培训学习心得体会
2016/01/18 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python