当前位置:首页 > Python > 正文

Python shutil模块使用教程 - 文件与目录操作指南

Python shutil模块使用教程

全面掌握文件与目录操作的高级技巧

什么是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)结合使用,可以构建强大的文件处理工具和自动化脚本。

本教程提供Python shutil模块的核心知识,实际应用中请根据需求查阅官方文档获取最新信息

发表评论