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 相关文章推荐
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Python正则简单实例分析
Mar 21 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 Python
python实现俄罗斯方块
Jun 26 Python
对Python中plt的画图函数详解
Nov 07 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
python异步存储数据详解
Mar 19 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
pytorch 输出中间层特征的实例
Aug 17 Python
Python列表操作方法详解
Feb 09 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
python获得图片base64编码示例
2014/01/16 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
python 两种方法删除空文件夹
2020/09/29 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
什么是网络协议
2016/04/07 面试题
销售行业个人求职自荐信
2013/09/25 职场文书
中学生校园广播稿
2014/01/16 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python