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