Python拷贝/删除文件夹

环境:Python 2.7, Win7 64bit

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)