python shutil模块实现文件夹复制的加强版

发布时间:2020-12-10编辑:脚本学堂
本文分享一例python代码,使用shutil模块进行文件夹的复制,目标文件存在时也是可以复制的,有需要的朋友参考下。

python的shutil模块主要用于文件夹的操作。
其中copytree用来对文件夹进行复制,如果目标文件已经存在的话,该函数就会报错抛异常了。
修改了下其源码,使其默认可以支持文件和文件夹的覆盖。

之前,脚本学堂为大家介绍过一篇有关shutil模块的文章:Python shutil 文件拷贝
今天介绍的这个是shutil文件复制功能的增强版。

例子:
 

复制代码 代码示例:
#!/bin/python
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复制与删除文件夹的小例子
Python os.path和shutil模块实现文件复制与删除
使用python进行文件复制
python实现文件递归复制的代码
python实现文件复制与删除