官方文档:
https://docs.python.org/3.6/library/shutil.html

复制文件:
shutil.copyfile(“oldfile”,”newfile”) #oldfile和newfile都只能是文件
shutil.copy(“oldfile”,”newfile”) #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录

复制文件夹:
shutil.copytree(“olddir”,”newdir”) #olddir和newdir都只能是目录,且newdir必须不存在

重命名文件(目录)
os.rename(“oldname”,”newname”) #文件或目录都是使用这条命令

移动文件(目录)
shutil.move(“oldpos”,”newpos”) 其中目的的文件夹可以不存在
shutil.move(“D:/知乎日报/latest/一张优惠券,换你的通讯录信息,你愿意吗?.pdf”, “D:/知乎日报/past/“)

移动和删除(rmtree)
shutil.rmtree(path[, ignore_errors[, onerror]])
删除整个目录树; path 必须指向一个文件夹,但不能是一个指向文件夹的符号链接。 如果 ignore_errors 值为真, 则删除失败时的信息将会被忽略。如果值为假或省略,那么这些错误将通过 onerror 指定的 handler 进行处理; 如果 onerror 被省略,则会 raise 一个异常。

如果指定了 onerror,则必须是包含三个参数: function, path 和 excinfo的 callable 。 第一个参数 function , 该函数用于 raise 异常;该函数可以是 os.path.islink(), os.listdir(), os.remove(), os.rmdir()。 第二个参数 path 为传递给第一个参数的路径。 第三个参数 excinfo 为 sys.exc_info()返回的异常信息。 通过 onerror raise 的异常不会被捕捉。

shutil.copy() 模块具体用法
shutil.copy(source, destination)(这种复制形式使用的前提是必须要有 os.chdir(你要处理的路径))
source/destination 都是字符串形式的路劲,其中destination是:
1、可以是一个文件的名称,则将source文件复制为新名称的destination
2、可以是一个文件夹,则将source文件复制到destination中
3、若这个文件夹不存在,则将source目标文件内的内容复制到destination中

shutil.copytree() 模块具体用法
shutil.copytree(source, destination)(这种复制形式无需 os.chdir() 便可操作)
source 、 destination 可以是不同的文件夹、不同的硬盘空间,
可以更为方便的实现文件的备份