Python shutil模块文件操作详解:复制、移动与删除

蓝鲸
蓝鲸
发布时间:2026-10-14| 3人浏览过
原创

本文详细介绍Python标准库shutil模块的核心文件操作功能。涵盖shutil.copy()单文件复制、shutil.copytree()整文件夹备份、shutil.move()文件移动与重命名,以及结合os模块实现的永久删除操作。通过具体代码示例解析各函数的参数行为、返回值及常见错误处理,帮助开发者掌握高效的文件管理技巧。

shutil模块简介

介绍

shutil 模块名称源自 shell utilities,熟悉 Linux 系统的读者对此并不陌生,这有助于记忆模块名。该模块提供了丰富的文件和目录操作功能,包括复制、移动、重命名和删除等。

文件复制:shutil.copy与copytree

一、shutil.copy(source, destination)

shutil.copy() 函数用于实现文件复制,将 source 指定的源文件复制到 destination 指定的目标文件夹中,两个参数均需为字符串格式。若 destination 指定的是文件名,则该名称将作为复制后文件的名称,相当于执行了复制并重命名的操作。

具体示例如下:


>> import shutil
 >> import os
 >> os.chdir('C:\')
 >> shutil.copy('C:\spam.txt', 'C:\delicious')
 'C:\delicious\spam.txt'
 >> shutil.copy('eggs.txt', 'C:\delicious\eggs2.txt')
 'C:\delicious\eggs2.txt'

如代码所示,该函数执行成功后返回复制完成的文件路径字符串。

二、shutil.copytree(source, destination)

shutil.copytree() 函数用于复制整个目录树,将 source 文件夹内的所有内容(包括文件和子文件夹)复制到 destination 中,两个参数均为字符串格式。

注意:如果 destination 指定的文件夹已存在,该操作将抛出 FileExistsError 错误,提示文件已存在。这意味着执行该函数时,程序会自动创建一个新的 destination 文件夹,并将 source 文件夹的内容复制进去。

具体示例如下:


>> import shutil
 >> import os
 >> os.chdir('C:\')
 >> shutil.copytree('C:\bacon', 'C:\bacon_backup')
 \'C:\bacon_backup'

如以上代码所示,该函数执行成功后返回复制完成的文件夹的绝对路径字符串。

因此,该函数常被用作数据备份功能。

文件移动与重命名:shutil.move

三、shutil.move(source, destination)

shutil.move() 函数用于将 source 指定的文件或文件夹移动到 destination 中。其返回值是移动后文件的绝对路径字符串。

如果 destination 指向一个已存在的文件夹,source 文件将被移动至该文件夹内,并保持原有文件名。例如:


>> import shutil
 >> shutil.move('C:\bacon.txt', 'C:\eggs')
 'C:\eggs\bacon.txt'

在上例中,如果 C:\eggs 文件夹中已存在同名文件 bacon.txt,则源文件中的同名文件将覆盖目标文件。

如果 destination 指向一个具体的文件名,则 source 文件将被移动并重命名为该文件名,如下所示:


>> shutil.move('C:\bacon.txt', 'C:\eggs\new_bacon.txt')
 'C:\eggs\new_bacon.txt'

这相当于执行了移动加重命名的操作。

<b>注意,如果 destination 是一个文件夹路径(即不带文件后缀的路径名),那么 source 文件将被移动并重命名为 destination 指定的名称</b>,如下所示:


>> shutil.move('C:\bacon.txt', 'C:\eggs')
 'C:\eggs'

即 bacon.txt 文件被重命名为 eggs,且新文件没有扩展名。

最后,destination 指定的目标文件夹必须已经存在,否则会引发异常:


>> shutil.move('spam.txt', 'C:\does_not_exist\eggs\ham')
 Traceback (most recent call last):
 File "D:\Python36\lib\shutil.py", line 538, in move
 os.rename(src, real_dst)
 FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'test.txt' -> 'C:\does_not_exist\eggs\ham'
 During handling of the above exception, another exception occurred:
 Traceback (most recent call last):
 File "

永久删除文件与文件夹

四、永久性删除文件和文件夹

此处涉及 os 模块中的相关函数,用于执行不可逆的删除操作。

os.unlink(path) 用于删除 path 路径下的文件。

os.rmdir(path) 用于删除 path 路径下的文件夹,但该文件夹必须是空的,不包含任何文件或子文件夹。

shutil.rmtree(path) 用于删除 path 路径下的文件夹,并递归删除该文件夹内的所有文件和子文件夹。

利用上述函数执行删除操作时需格外谨慎,因为一旦路径拼写错误(例如想删除 txt 文件却误写为 rxt),可能会导致数据丢失。

此时,我们可以利用字符串的 endswith 属性对文件格式进行检查与筛选,以确保操作对象的准确性。

总结

以上就是本文的全部内容,希望这些内容能对您的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。