shutil 是 Python 的标准库之一,专门用于执行高级的文件和文件夹操作,如复制、移动、删除、打包压缩等。它在处理实际文件系统任务(尤其涉及大文件或整个目录)时非常有用,是 os 模块的功能补充。
常见应用场景:
(1)拷贝文件或整个目录(保留/不保留元数据)。
(2)移动文件或目录。
(3)删除整个目录树。
(4)创建压缩归档(zip、tar、gztar 等)。
(5)查询磁盘使用情况。
(6)文件对象复制(适用于类文件对象)。
◆ ◆ ◆
核心概念
1、shutil 是 shell utilities 的缩写,意为“命令行工具集合”。
2、与 os.rename()、os.remove() 等函数不同,shutil 适用于更复杂的操作,如递归复制整个目录、跨设备移动文件。
3、复制文件时,可选择是否保留元数据(如创建时间、权限)。
4、支持打包归档功能:可将目录打包为 .zip、.tar.gz 等。
5、所有操作均在操作系统层面执行,真实修改磁盘内容。
◆ ◆ ◆
应用举例
例 1:复制文件(保留元数据)
import shutil
shutil.copy2("mediaTEAdir.txt", "backup.txt") # 复制文件及其元数据(如修改时间)
例 2:复制整个目录
import shutil
shutil.copytree("test", "data_backup") # 递归复制整个目录
例 3:移动文件或目录
import shutil
shutil.move("test/t1/mediaTEA.txt", "test/t2/") # 将文件移动到新目录
例 4:删除整个目录树
import shutil
shutil.rmtree("test/t2") # 删除整个 t2 文件夹及其内容
例 5:创建 zip 格式压缩包
import shutil
shutil.make_archive("mediaTEA", "zip", "test") # 将目录 test 压缩为 mediaTEA.zip
◆ ◆ ◆
常用函数速览
shutil.copy(src, dst)
复制文件,不保留原文件元数据(如权限、时间戳)。
参数:src 源文件路径,dst 目标路径
返回:目标文件的路径字符串
shutil.copy2(src, dst)
复制文件,并保留文件的元数据(推荐用于备份)。
参数:同上
返回:目标文件的路径字符串
shutil.copyfile(src, dst)
仅复制文件内容,不复制权限或元数据,不支持目录路径。
参数:同上
返回:目标文件路径
shutil.copyfileobj(fsrc, fdst[, length])
从一个类文件对象复制内容到另一个。
参数:fsrc 和 fdst 为文件对象,length 为每次读取的字节数(可选)
返回:None
shutil.copytree(src, dst, dirs_exist_ok=False)
递归复制整个目录树。
参数:
src:源目录路径
dst:目标目录路径
dirs_exist_ok:为 True 时,允许目标目录已存在(Python 3.8+)
返回:目标目录路径
shutil.disk_usage(path)
返回指定路径所在磁盘的总容量、已用空间和可用空间(以字节为单位)。
参数:path 字符串
返回:命名元组 (total, used, free)
shutil.get_archive_formats()
列出可用的归档格式(用于 make_archive())。
返回:格式名与描述组成的列表
shutil.make_archive(base_name, format, root_dir=None)
将目录打包成压缩文件(支持 zip、tar、gztar 等格式)。
参数:
base_name:压缩包路径(不含扩展名)
format:'zip', 'tar', 'gztar', 'bztar' 等
root_dir:要压缩的目录(默认为当前目录)
返回:压缩文件路径
shutil.move(src, dst)
移动文件或目录。若跨磁盘分区,将自动复制再删除原始文件。
参数:src 和 dst 为路径字符串
返回:目标路径字符串
shutil.rmtree(path, ignore_errors=False)
递归删除目录树。
参数:
path:目录路径
ignore_errors:为 True 时忽略删除错误
返回:None
◆ ◆ ◆
补充说明
1、copy2() 是文件复制中最通用、最安全的选择。
2、copytree() 是备份整个目录的首选。
3、make_archive() 可快速将项目或文件夹压缩保存。
4、对于临时清理、测试项目,rmtree() 可以彻底删除文件夹内容,但需谨慎使用。
“点赞有美意,赞赏是鼓励”