shutil 模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。
shutil.copyfileobj(fsrc, fdst[, length])
,将文件对象 fsrc
的内容从当前位置开始复制到 fdst
文件中。>>> a = open('file1', 'r')
>>> b = open('file2', 'w')
>>> shutil.copyfileobj(a, b, 20)
>>> a.close()
>>> b.close()
shutil.copyfile(src, dst, *, follow_symlinks=True)
,将名为 src
的文件的内容拷贝到名为 dst
的文件中。src, dst
是字符串形式的路径名。>>> shutil.copyfile('file1', 'file2')
'file2'
>>>
shutil.copymode(src, dst, *, follow_symlinks=True)
,将 src
的权限拷贝到 dst
文件,其它信息不变。shutil.copystat(src, dst, *, follow_symlinks=True)
,从 src
拷贝权限位、最近访问时间、最近修改时间以及旗标到 dst
。 在 Linux上,copystat()
还会在可能的情况下拷贝“扩展属性”。 文件的内容、所有者和分组将不受影响。shutil.copy(src, dst, *, follow_symlinks=True)
,拷贝文件 src
到 dst
。如果 dst
是一个目录,则创建一个新的文件。如果 dst
是一个文件路径,则被替换。函数返回新文件的路径。该函数会拷贝文件的文件数据和权限,其它数据不会保留。>>> shutil.copy('file1', 'file2')
'file2'
shutil.copy2(src, dst, *, follow_symlinks=True)
,类似 shutil.copy()
,区别是该函数会保留文件的元数据。
shutil.ignore_patterns(*patterns)
,这个工厂函数会创建一个函数,它可被用作 copytree()
的 ignore
可调用对象参数,以忽略那些匹配所提供的 glob 风格的 patterns 之一的文件和目录。
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)
,以递归方式将根植于 src 的整个目录树复制到名为 dst
的目录,并返回目标目录。默认情况下,还将创建包含 dst
所需的所有中间目录。目录的权限和时间会通过 copystat()
来拷贝,单个文件则会使用 copy2()
来拷贝。
如果 symlinks
为真值,源目录树中的符号链接会在新目录树中表示为符号链接,并且原链接的元数据在平台允许的情况下也会被拷贝;如果为假值或省略,则会将被链接文件的内容和元数据拷贝到新目录树。
当 symlinks
为假值时,如果符号链接所指向的文件不存在,则会在拷贝进程的末尾将一个异常添加到Error
异常中的错误列表。 如果你希望屏蔽此异常那就将可选的ignore_dangling_symlinks
旗标设为真值。 请注意此选项在不支持 os.symlink()
的平台上将不起作用。
如果给出了 ignore
,它必须是一个可调用对象,该对象将接受 copytree()
所访问的目录以及 os.listdir()
所返回的目录内容列表作为其参数。 由于 copytree()
是递归地被调用的,ignore
可调用对象对于每个被拷贝目录都将被调用一次。 该可调用对象必须返回一个相对于当前目录的目录和文件名序列(即其第二个参数的子集);随后这些名称将在拷贝进程中被忽略。 ignore_patterns()
可被用于创建这种基于 glob 风格模式来忽略特定名称的可调用对象。
如果发生了(一个或多个)异常,将引发一个附带原因列表的 Error
。
如果给出了 copy_function
,它必须是一个将被用来拷贝每个文件的可调用对象。 它在被调用时会将源路径和目标路径作为参数传入。 默认情况下,copy2()
将被使用,但任何支持同样签名(与 copy()
一致)都可以使用。
shutil.rmtree(path, ignore_errors=False, onerror=None)
,返回一个完整的目录树;path
必须指向一个目录。 如果 ignore_errors 为真值,删除失败导致的错误将被忽略;如果为假值或是省略,此类错误将通过调用由 onerror 所指定的处理程序来处理,或者如果此参数被省略则将引发一个异常。
shutil.move(src, dst, copy_function=copy2)
,递归地将一个文件或目录 (src) 移至另一位置 (dst) 并返回目标位置。如果目标是已存在的目录,则 src 会被移至该目录下。 如果目标已存在但不是目录,它可能会被覆盖,具体取决于 os.rename() 的语义。