介绍
shutil 模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。对于单个文件的操作,请参阅 os 模块。
常用函数
- shutil.copyfileobj(fsrc,fdst,length)
将文件类对象 fsrc 的内容拷贝到文件类对象 fdst。 copyfileobj是最基本的函数,下面的很多函数都用到了此函数。
import shutil
shutil.copyfileobj(open('old.xml','r'),open('new.xml','w'))
- shutil.copyfile(src,dst)
将名为 src 的文件的内容(不包括元数据)拷贝到名为 dst 的文件并以尽可能高效的方式返回 dst。 src 和 dst 均为路径类对象或以字符串形式给出的路径名。
import shutil
shutil.copyfile('f1.log','f2.log')
- shutil.copymode(src,dst,*,follow_sumlinks=True)
从 src 拷贝权限位到 dst。 文件的内容、所有者和分组将不受影响。
import shutil
shutil.copymode('f1.log', 'f2.log')
- shutil.copystat(src, dst, *, follow_symlinks=True)
从 src 拷贝权限位、最近访问时间、最近修改时间以及旗标到 dst。
import shutil
shutil.copystat('f1.log', 'f2.log')
- shutil.copy(src, dst, *, follow_symlinks=True)
将文件 src 拷贝到文件或目录 dst。
def copy(src,dst):
"""copy data and mode bits ("cp src dst")
The destination may be a directory.
"""
if os.path.isdir(dst):
dst = os.path.join(dst,os.path.basename(src))
copyfile(src,dst,follow_symlinks=follow_symlinks)
copymode(src,dst,follow_symlinks=follow_symlinks)
- shutil.copy2(src, dst, *, follow_symlinks=True)
类似于 copy(),区别在于 copy2() 还会尝试保留文件的元数据。
def copy2(src, dst, *, follow_symlinks=True):
"""Copy data and metadata. Return the file's destination.
Metadata is copied with copystat(). Please see the copystat function
for more information.
The destination may be a directory.
If follow_symlinks is false, symlinks won't be followed. This
resembles GNU's "cp -P src dst".
"""
if os.path.isdir(dst):
dst = os.path.join(dst, os.path.basename(src))
copyfile(src, dst, follow_symlinks=follow_symlinks)
copystat(src, dst, follow_symlinks=follow_symlinks)
return dst
- 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 之一的文件和目录。 参见以下示例。
import shutil
shutil.copytree('f1','f2',symlinks=True,ignore=ignore_patterns('*.pyc', 'tmp*'))
- shutil.rmtree(path, ignore_errors=False, οnerrοr=None)
删除一个完整的目录树;path 必须指向一个目录(但不能是一个目录的符号链接)。 如果 ignore_errors 为真值,删除失败导致的错误将被忽略;如果为假值或是省略,此类错误将通过调用由 onerror 所指定的处理程序来处理,或者如果此参数被省略则将引发一个异常。
import shutil
shutil.rmtree('folder1',ignore_erros=True)
- shutil.move(src, dst, copy_function=copy2)
递归地将一个文件或目录 (src) 移至另一位置 (dst) 并返回目标位置。
import shutil
shutil.move('folder1','folder2')