什么是shutil模块?
shutil(shell utility)是Python标准库中用于高级文件操作的模块,提供了文件复制、移动、删除以及目录管理等实用功能。它是对os模块文件操作功能的补充,特别适合处理文件和目录的高级操作。
主要功能概览
- 文件和目录复制
- 文件和目录移动/重命名
- 递归删除目录
- 磁盘空间管理
- 归档文件操作
- 权限管理
核心函数详解
1. 复制文件 - shutil.copy()
复制单个文件到目标位置,可同时重命名文件。
import shutil
# 复制文件到目标目录
shutil.copy('source.txt', 'backup/')
# 复制并重命名文件
shutil.copy('source.txt', 'backup/copy_source.txt')
2. 复制目录 - shutil.copytree()
递归复制整个目录树,包括所有子目录和文件。
# 复制整个目录
shutil.copytree('source_dir', 'backup_dir')
# 忽略特定文件类型
def ignore_pyc(dir, files):
return [f for f in files if f.endswith('.pyc')]
shutil.copytree('src', 'backup', ignore=ignore_pyc)
3. 移动文件/目录 - shutil.move()
移动文件或目录到新位置,也可用于重命名操作。
# 移动文件
shutil.move('old_location/file.txt', 'new_location/')
# 重命名文件
shutil.move('old_name.txt', 'new_name.txt')
# 移动并重命名目录
shutil.move('old_dir', 'new_parent/new_dir')
4. 删除目录 - shutil.rmtree()
递归删除整个目录树,包括所有子目录和文件。
# 删除整个目录
shutil.rmtree('directory_to_remove')
# 安全删除(处理删除错误)
import os, stat
def remove_readonly(func, path, _):
os.chmod(path, stat.S_IWRITE)
func(path)
shutil.rmtree('protected_dir', onerror=remove_readonly)
5. 磁盘空间 - shutil.disk_usage()
获取磁盘使用情况统计(总空间、已用空间、可用空间)。
# 获取当前目录的磁盘使用情况
usage = shutil.disk_usage('.')
print(f"Total: {usage.total / (1024**3):.2f} GB")
print(f"Used: {usage.used / (1024**3):.2f} GB")
print(f"Free: {usage.free / (1024**3):.2f} GB")
实用技巧
- 使用
shutil.copy2()
保留文件的元数据(修改时间、权限等) - 处理只读文件时,使用
onerror
回调修改权限 - 使用
ignore_patterns
简化文件过滤 - 结合
os.path
模块进行路径操作 - 使用
shutil.which()
查找可执行程序的路径
综合示例
备份项目目录,排除临时文件和版本控制目录:
import shutil
from datetime import datetime
def backup_project(project_dir, backup_root):
# 创建带时间戳的备份目录
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
backup_dir = f"{backup_root}/project_backup_{timestamp}"
# 忽略模式:临时文件和版本控制目录
ignore = shutil.ignore_patterns('*.tmp', '.git', '.svn', '__pycache__')
# 执行备份
shutil.copytree(project_dir, backup_dir, ignore=ignore)
print(f"Backup created at: {backup_dir}")
return backup_dir
# 使用示例
backup_project('/path/to/project', '/backup/storage')
总结
shutil模块是Python文件操作的核心工具之一,它提供了简单而强大的API来处理日常的文件和目录操作任务。通过本教程,您应该已经掌握了:
- 文件和目录的复制、移动操作
- 递归删除目录树的方法
- 磁盘空间管理技巧
- 文件过滤和错误处理策略
将shutil与其他Python模块(如os、glob)结合使用,可以构建强大的文件处理工具和自动化脚本。
发表评论