Python shutil 模块

在 Python 中,os 模块操作文件或文件夹的能力是有限的,因此还需借助其他模块来辅助开发。接下来介绍 shutil 模块,它可以帮助我们实现这 3 种操作:复制文件、移动文件和删除文件。

Python shutil 复制文件

在 Python 中,我们可以使用 shutil 模块的 copy() 函数将一个文件复制到另一个文件夹中。

语法:

shutil.copy(src, dest)

说明:

参数 src 表示源路径,参数 dest 表示目标路径。dest 指向的是一个文件,也可以是一个文件夹。

接下来在当前项目下创建两个文件夹:src 和 dest,然后在 src 文件夹中创建一个 A.txt,整个项目结构如下图所示。

Python shutil 项目结构 1

示例 1:复制但不改名

import shutil
shutil.copy('src/A.txt', 'dest')

运行之后,项目结构变成如下图所示。

Python shutil 复制但不改名

分析:

从结果可以看出来,A.txt 这个文件已经被复制到 “dest” 这个文件夹下了。当然了,这里使用绝对路径也是可以的,下面两种方式是等价的。

# 相对路径
shutil.copy('src/A.txt', 'dest')

# 绝对路径
shutil.copy(r'D:\python-test\src\A.txt', r'D:\python-test\dest')

示例 2:复制并改名

import shutil
shutil.copy('src/A.txt', 'dest/B.txt')

运行之后,项目结构变成如下图所示。

Python shutil 复制并改名

分析:

如果 B.txt 一开始是不存在的,则上面示例表示将 A.txt 复制过去并改名为 B.txt。如果 B.txt 文件一开始是存在的,则上面示例表示用 A.txt 的内容替换 B.txt 的内容。

上面两个例子是不一样的,第一个是复制文件但不改变文件名,而第二个是复制文件并且改变文件名,小伙伴们要认真对比一下两者的不同。

想要复制一个文件,可以使用 copy() 函数。但如果想要复制一个文件夹,此时应该怎么做呢?我们可以使用 copytree() 函数来实现。

示例 3:复制文件夹

import shutil
shutil.copytree('src', 'src-backup')

运行代码之后,项目结构变成如下图所示。

Python shutil 复制文件夹

分析:

在上面示例中,copytree() 函数会创建一个名为 “src-backup” 的新文件夹,然后把 src 中的所有文件复制一份到 src-backup 中。一般来说,copytree() 函数都是用来备份文件的。

Python shutil 移动文件

在 Python 中,我们可以使用 shutil 模块的 move() 函数将一个文件或文件夹移动到另一个文件夹中。

语法:

shutil.move(src, dest)

说明:

参数 src 表示源路径,参数 dest 表示目标路径。接下来,调整一下目录结构为下图所示。

Python shutil 项目结构 2

示例 4:移动但不改名

import shutil
shutil.move('src/A.txt', 'dest')

运行之后,项目结构变成如下图所示。

Python shutil 移动但不改名

分析:

从结果可以看出来,src 文件夹中的 A.txt 被移动到了 dest 文件夹中。

示例 5:移动并改名

import shutil
shutil.move('src/B.txt', 'dest/BB.txt')

运行之后,项目结构如下图所示。

Python shutil 移动并改名

分析:

从结果可以看出,src 文件夹中的 B.txt 被移动到了 dest 文件夹中,并且被重命名为 BB.txt。

上面是将文件进行移动,接下来尝试移动一下文件夹。为了测试效果,需要清空 src 和 dest 这两个文件夹,然后在当前项目中新建两个文件夹:animal 和 planet,并且往这两个文件夹中添加一些文件,整个项目结构如下图所示。

Python shutil 项目结构 3

示例 6:移动文件夹

import shutil
shutil.move('animal', 'dest')
shutil.move('planet', 'dest')

运行之后,项目结构变成如下图所示。

Python shutil 移动文件夹

分析:

从结果可以看出,animal 和 planet 这两个文件夹已经被移动到 dest 文件夹下了。需要注意的是,移动文件夹使用的也是 move() 函数,而不是 movetree() 函数。

Python shutil 删除文件夹

在 Python 中,我们可以使用 shutil 模块的 rmtree() 函数删除文件夹。

语法:

shutil.rmtree(path)

说明:

rmtree 是 “remove tree” 的缩写,rmtree() 函数会将该文件夹及其内部文件全部删除。为了测试后面示例的效果,需要将当前项目目录结构重塑成如下图所示。

Python shutil 项目结构 4

示例 7:删除文件夹

import shutil
shutil.rmtree('src')

运行之后,项目结构变成如下图所示。

Python shutil 删除文件夹

分析:

从结果可以看出,src 这个文件夹以及它内部所有的文件,都已经被删除了。特别注意,使用 unlink() 和 rmtree() 这两个函数,文件或文件夹被删除后,并不是被放到回收站了,而是被永久删除了!因此大家在使用这两种方法的时候,一定要特别小心。

需要注意的是,上一节讲过的 os.rmdir() 只能删除 “空的文件夹”。而 shutil.rmtree() 则非常霸道,无论文件夹里有多少层文件和子目录,它都会将其连根拔起、彻底删除。所以在执行这个函数时,一定要小心!

提示: shutil 模块的 rmtree() 函数用于删除文件夹,如果想要删除文件,应该使用 pathlib 模块的 unlink() 方法。

上一篇: Python os 模块

下一篇: Python send2trash 模块

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号