拷贝或移动文件和目录

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),拷贝文件 srcdst。如果 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() 的语义。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐