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之眼花缭乱的运算符
Sep 14 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
python更改已存在excel文件的方法
May 03 Python
python实现自动登录
Sep 17 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
python绘制漏斗图步骤详解
Mar 04 Python
详解Python打包分发工具setuptools
Aug 05 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
基于python实现地址和经纬度转换
May 19 Python
Keras 快速解决OOM超内存的问题
Jun 11 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自定义函数之递归删除文件及目录
2010/08/08 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
PHP解决中文乱码
2017/04/28 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python日志模块logging简介
2015/04/13 Python
详解Python的Django框架中的模版相关知识
2015/07/15 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Python3 log10()函数简单用法
2019/02/19 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
python中关于数据类型的学习笔记
2020/07/19 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
语文教育专业推荐信范文
2013/11/25 职场文书
函授本科自我鉴定
2014/02/04 职场文书
广播体操比赛主持词
2015/06/29 职场文书
汶川大地震感悟
2015/08/10 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python