shutil.copy和shutil.copytree对比
shutil.copy(src, dst, *, follow_symlinks=True)
该函数的目的是将文件src的数据和权限模式拷贝至dst(文件或目录),并返回新创建文件所对应的路径。
src:
- 应为路径类对象或字符串;
- 只能为具体某个文件,若为目录会报错误“[Errno 13] Permission denied”;
dst:
- 应为路径类对象或字符串;
- 若为文件名,则会将文件src更名为dst,并放入dst所对应的路径;
- 若为目录名,则会将文件src放入该路径中,文件名不会变;
- 若src和dst完全相同,会报错误“SameFileError”;
follow_symliks:
- 若为false且src为符号链接,则dst也会被创建为符号链接;
- 若为True且src为符号链接,则dst将成为src所指向的文件的一个副本;
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlink=False, dirs_exist_ok=False)
该函数的目的是递归复制以src为根起点的整个目录树到名为dst的目录并返回目标目录。
src:
dst:
symlinks:
- 若为True,则src中的符号链接会在新目录中表示为符号链接,并且原链接的元数据在平台允许的情况下也会被拷贝;
- 若为False,则会将被链接文件的内容和元数据拷贝到dst目录;
- 若src中的符号链接所指向的文件不存在时,则会在拷贝进程的末尾将一个异常添加到Error异常的错误列表中;若希望屏蔽此异常,则可将ignore_dangling_synlinks设为True;
ignore:
- 若给出了ignore,则它必须是一个可调用对象,该对象将接受copytree()所访问的目录和os.listdir()所返回的目录作为其入参;由于copytree()是递归调用的,所以对于复制的每个目录,都将调用一次ignore。该调用对象必须返回一个相对于当前目录的目录和文件名序列(即其第二个参数的子集);随后这些名称在拷贝进程中将被忽略;
copy_function:
- 若给出了copy_function,则它必须是一个将被用来拷贝每个文件的可调用对象,它在被调用时会将src和dst作为参数传入。默认情况下,copy2()将被使用,但也可以使用任何支持同样签名的函数(如copy());
dirs_exist_ok:
- 该参数指明是否要在dst或任何丢失的父目录已经存在的情况下引发异常。