拷贝或移动文件和目录
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() 的语义。
如果觉得《【Python】拷贝或移动文件和目录》对你有帮助,请点赞、收藏,并留下你的观点哦!