介绍


shutil 模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。对于单个文件的操作,请参阅 os 模块。

常用函数


  1. shutil.copyfileobj(fsrc,fdst,length)

将文件类对象 fsrc 的内容拷贝到文件类对象 fdst。 copyfileobj是最基本的函数,下面的很多函数都用到了此函数。

  1. import shutil
  2. shutil.copyfileobj(open('old.xml','r'),open('new.xml','w'))
  1. shutil.copyfile(src,dst)

将名为 src 的文件的内容(不包括元数据)拷贝到名为 dst 的文件并以尽可能高效的方式返回 dst。 src 和 dst 均为路径类对象或以字符串形式给出的路径名。

  1. import shutil
  2. shutil.copyfile('f1.log','f2.log')
  1. shutil.copymode(src,dst,*,follow_sumlinks=True)

从 src 拷贝权限位到 dst。 文件的内容、所有者和分组将不受影响。

  1. import shutil
  2. shutil.copymode('f1.log', 'f2.log')
  1. shutil.copystat(src, dst, *, follow_symlinks=True)

从 src 拷贝权限位、最近访问时间、最近修改时间以及旗标到 dst。

  1. import shutil
  2. shutil.copystat('f1.log', 'f2.log')
  1. shutil.copy(src, dst, *, follow_symlinks=True)

将文件 src 拷贝到文件或目录 dst。

  1. def copy(src,dst):
  2. """copy data and mode bits ("cp src dst")
  3. The destination may be a directory.
  4. """
  5. if os.path.isdir(dst):
  6. dst = os.path.join(dst,os.path.basename(src))
  7. copyfile(src,dst,follow_symlinks=follow_symlinks)
  8. copymode(src,dst,follow_symlinks=follow_symlinks)
  1. shutil.copy2(src, dst, *, follow_symlinks=True)

类似于 copy(),区别在于 copy2() 还会尝试保留文件的元数据。

  1. def copy2(src, dst, *, follow_symlinks=True):
  2. """Copy data and metadata. Return the file's destination.
  3. Metadata is copied with copystat(). Please see the copystat function
  4. for more information.
  5. The destination may be a directory.
  6. If follow_symlinks is false, symlinks won't be followed. This
  7. resembles GNU's "cp -P src dst".
  8. """
  9. if os.path.isdir(dst):
  10. dst = os.path.join(dst, os.path.basename(src))
  11. copyfile(src, dst, follow_symlinks=follow_symlinks)
  12. copystat(src, dst, follow_symlinks=follow_symlinks)
  13. return dst
  1. shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)

将以 src 为根起点的整个目录树拷贝到名为 dst 的目录并返回目标目录。 dirs_exist_ok 指明是否要在 dst 或任何丢失的父目录已存在的情况下引发异常
shutil.ignore_patterns(*patterns)这个工厂函数会创建一个函数,它可被用作 copytree() 的 ignore 可调用对象参数,以忽略那些匹配所提供的 glob 风格的 patterns 之一的文件和目录。 参见以下示例。

  1. import shutil
  2. shutil.copytree('f1','f2',symlinks=True,ignore=ignore_patterns('*.pyc', 'tmp*'))
  1. shutil.rmtree(path, ignore_errors=False, οnerrοr=None)

删除一个完整的目录树;path 必须指向一个目录(但不能是一个目录的符号链接)。 如果 ignore_errors 为真值,删除失败导致的错误将被忽略;如果为假值或是省略,此类错误将通过调用由 onerror 所指定的处理程序来处理,或者如果此参数被省略则将引发一个异常。

  1. import shutil
  2. shutil.rmtree('folder1',ignore_erros=True)
  1. shutil.move(src, dst, copy_function=copy2)

递归地将一个文件或目录 (src) 移至另一位置 (dst) 并返回目标位置。

  1. import shutil
  2. shutil.move('folder1','folder2')