Python shutil模块文件操作完全指南 | 高效文件管理技巧
- Python
- 2025-08-05
- 481
Python shutil模块文件操作完全指南
在Python编程中,文件操作是常见任务之一。shutil模块提供了高效的文件和目录管理功能,可以简化复制、移动、删除等操作。本教程将详细介绍shutil模块的核心功能和使用方法。
shutil模块简介
shutil(shell utility)是Python标准库中用于高级文件操作的模块,提供了比os模块更便捷的文件和目录管理功能。
主要功能包括:
- 文件和目录的复制
- 文件和目录的移动(重命名)
- 递归删除目录
- 文件权限和元数据的处理
- 磁盘空间使用情况查询
使用前需要导入模块:
import shutil
复制文件
shutil提供了多种文件复制方法,适用于不同场景。
1. shutil.copy() - 复制文件内容
复制源文件内容到目标文件,如果目标是目录则创建同名文件。
import shutil
# 复制文件内容(目标可以是文件或目录)
shutil.copy('source.txt', 'destination.txt')
shutil.copy('source.txt', 'backup/') # 复制到backup目录
2. shutil.copy2() - 复制文件内容及元数据
类似于copy(),但会保留文件的元数据(如修改时间、权限等)。
# 复制文件并保留元数据
shutil.copy2('source.txt', 'destination.txt')
3. shutil.copyfile() - 仅复制内容
仅复制文件内容,目标必须是文件路径。
# 仅复制文件内容
shutil.copyfile('source.txt', 'destination.txt')
复制目录
shutil.copytree()方法可以递归复制整个目录树。
# 递归复制目录
shutil.copytree('source_dir', 'backup_dir')
# 复制时忽略特定文件/目录
def ignore_func(dir, names):
return [name for name in names if name.endswith('.tmp')]
shutil.copytree('source', 'backup', ignore=ignore_func)
# 使用预定义忽略模式
shutil.copytree('source', 'backup', ignore=shutil.ignore_patterns('*.tmp', 'temp*'))
注意: 目标目录不能已存在,否则会引发FileExistsError。
移动文件/目录
shutil.move()方法用于移动文件或目录,也可用于重命名操作。
# 移动文件
shutil.move('source.txt', 'destination.txt')
# 移动目录
shutil.move('old_dir', 'new_location/')
# 重命名文件
shutil.move('old_name.txt', 'new_name.txt')
# 重命名目录
shutil.move('old_dir', 'new_dir')
提示: 如果目标位于同一文件系统,move()操作是原子操作(重命名)。跨文件系统移动时,实际是复制后删除源文件。
删除目录
shutil.rmtree()用于递归删除目录及其所有内容。
# 递归删除目录
shutil.rmtree('directory_to_remove')
# 删除时忽略错误(文件不存在等)
shutil.rmtree('dir', ignore_errors=True)
# 自定义错误处理
def on_error(func, path, exc_info):
import os
print(f"无法删除 {path} 因为: {exc_info[1]}")
os.chmod(path, 0o777) # 修改权限后重试
shutil.rmtree('dir', onerror=on_error)
警告: rmtree()会永久删除目录及其所有内容,请谨慎使用!
高级文件操作
磁盘空间使用
# 获取磁盘使用情况
total, used, free = shutil.disk_usage('/')
print(f"总空间: {total // (2**30)}GB")
print(f"已使用: {used // (2**30)}GB")
print(f"可用空间: {free // (2**30)}GB")
归档操作
# 创建ZIP归档
shutil.make_archive('backup', 'zip', 'source_dir')
# 解压归档
shutil.unpack_archive('backup.zip', 'extracted_files')
错误处理
文件操作中常见的异常需要妥善处理。
import shutil
import os
try:
shutil.copy('source.txt', 'destination.txt')
except FileNotFoundError:
print("错误:源文件不存在")
except PermissionError:
print("错误:没有操作权限")
except shutil.SameFileError:
print("错误:源和目标相同")
except Exception as e:
print(f"未知错误: {str(e)}")
常见异常:
- FileNotFoundError - 源文件/目录不存在
- PermissionError - 权限不足
- FileExistsError - 目标已存在
- shutil.SameFileError - 源和目标相同
总结
shutil模块核心功能回顾
- 使用
copy()
/copy2()
复制文件 - 使用
copytree()
复制整个目录 - 使用
move()
移动或重命名文件和目录 - 使用
rmtree()
递归删除目录 - 使用
disk_usage()
获取磁盘空间信息 - 使用
make_archive()
和unpack_archive()
处理压缩文件
最佳实践建议
- 操作前检查文件和目录是否存在
- 处理异常并提供有意义的错误信息
- 递归操作时注意权限问题
- 使用绝对路径避免路径错误
- 重要操作前建议先备份数据
本教程更新于2023年10月 | Python shutil模块文件操作指南
本文由ChangZheZe于2025-08-05发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257362.html
发表评论