shutil(Shell Utilities)是 Python 标准库中用于高级文件操作的模块,提供了比 os模块更便捷的文件/目录复制、移动、删除、归档等功能。下面详细介绍其核心功能、参数说明及示例代码。
1. 文件复制
**(1) shutil.copy(src, dst)**
作用:复制文件到目标路径(保留文件权限,但不保留元数据如修改时间)。
参数:
src:源文件路径(必须是文件,不能是目录)。dst:目标路径(可以是文件名或目录)。
示例:
python
import shutil
# 复制文件到目标目录(保留文件名)
shutil.copy("source.txt", "backup/") # 目标路径是目录,自动保留原文件名
# 复制文件并重命名
shutil.copy("source.txt", "backup/copied_file.txt") # 指定新文件名
**(2) shutil.copy2(src, dst)**
作用:复制文件并保留所有元数据(如修改时间、创建时间等)。
参数 :同 shutil.copy()。
示例:
python
shutil.copy2("source.txt", "backup/") # 保留元数据
**(3) shutil.copyfile(src, dst)**
作用:仅复制文件内容(不复制权限、元数据)。
参数:
src:源文件路径。dst:目标文件路径(必须是文件名,不能是目录)。
示例:
python
shutil.copyfile("source.txt", "backup/copied_content.txt") # 仅复制内容
2. 目录操作
**(1) shutil.copytree(src, dst)**
作用:递归复制整个目录树(包括子目录和文件)。
参数:
src:源目录路径。dst:目标目录路径(必须不存在,否则报错FileExistsError)。
示例:
python
# 复制整个目录
shutil.copytree("my_folder", "backup_folder") # 目标目录必须不存在
**(2) shutil.rmtree(path)**
作用 :递归删除目录及其所有内容(类似 rm -rf)。
参数:
path:要删除的目录路径。
示例:
python
shutil.rmtree("temp_folder") # 慎用!不可恢复
3. 文件移动
**shutil.move(src, dst)**
作用:移动文件或目录(类似剪切操作)。
参数:
src:源路径(文件或目录)。dst:目标路径(可以是目录或新文件名)。
示例:
python
# 移动文件
shutil.move("old_location/file.txt", "new_location/") # 移动到目录
shutil.move("file.txt", "renamed_file.txt") # 移动并重命名
# 移动目录
shutil.move("old_dir", "new_dir") # 目录移动
4. 归档与压缩
**(1) shutil.make_archive(base_name, format, root_dir)**
作用 :创建压缩包(支持 zip、tar、gztar等格式)。
参数:
base_name:压缩包名称(不带扩展名)。format:压缩格式("zip"、"tar"、"gztar"等)。root_dir:要压缩的目录路径。
示例:
python
# 创建 ZIP 压缩包
shutil.make_archive("backup", "zip", "my_folder") # 生成 backup.zip
# 创建 TAR.GZ 压缩包
shutil.make_archive("backup", "gztar", "my_folder") # 生成 backup.tar.gz
**(2) shutil.unpack_archive(filename, extract_dir)**
作用 :解压归档文件(支持 zip、tar、gztar等)。
参数:
filename:压缩包路径。extract_dir:解压目标目录(可选,默认当前目录)。
示例:
python
# 解压 ZIP 文件
shutil.unpack_archive("backup.zip", "extracted_files/")
5. 磁盘空间查询
**shutil.disk_usage(path)**
作用:返回磁盘使用情况(总空间、已用空间、剩余空间)。
参数:
path:要查询的路径(如"/"或"C:")。
返回值 :namedtuple包含 total、used、free(单位:字节)。
示例:
python
usage = shutil.disk_usage("/")
print(f"总空间: {usage.total / (1024**3):.2f} GB")
print(f"已用空间: {usage.used / (1024**3):.2f} GB")
print(f"剩余空间: {usage.free / (1024**3):.2f} GB")
总结
| 方法 | 作用 | 关键参数 |
|---|---|---|
copy(src, dst) |
复制文件(保留权限) | src, dst |
copy2(src, dst) |
复制文件(保留元数据) | src, dst |
copyfile(src, dst) |
仅复制内容 | src, dst |
copytree(src, dst) |
递归复制目录 | src, dst |
rmtree(path) |
递归删除目录 | path |
move(src, dst) |
移动文件/目录 | src, dst |
make_archive() |
创建压缩包 | base_name, format, root_dir |
unpack_archive() |
解压文件 | filename, extract_dir |
disk_usage() |
查询磁盘空间 | path |
shutil适合处理高级文件操作,而底层控制(如文件句柄)仍需结合 os或 pathlib。