pin_drop当前位置:知识文库 ❯ 图文
Python shutil模块详解 - 文件操作高级指南
概述
Python 的 shutil 模块(shell utility 的缩写)是标准库中用于高级文件操作的工具模块。它提供了文件复制、移动、删除、权限管理、归档压缩等功能,是对 os 模块中基础文件操作的补充。shutil 的操作比 os 模块更高级,能够处理目录树、保留文件元数据等复杂场景,是日常文件管理自动化的核心工具。
语法
代码示例
import shutil
# 文件复制
shutil.copy(src, dst)
shutil.copy2(src, dst)
shutil.copyfile(src, dst)
# 目录操作
shutil.copytree(src, dst)
shutil.rmtree(path)
shutil.move(src, dst)
# 归档操作
shutil.make_archive(base_name, format, root_dir)
shutil.unpack_archive(filename, extract_dir)
# 磁盘信息
shutil.disk_usage(path)参数说明
返回值
不同函数返回值不同:copy() 和 copy2() 返回目标路径字符串,make_archive() 返回归档文件路径,disk_usage() 返回命名元组。
代码示例
示例1:基本文件操作
代码示例
import shutil
import os
# 创建测试文件
with open('source.txt', 'w', encoding='utf-8') as f:
f.write('Hello, shutil!')
# 复制文件
dst = shutil.copy('source.txt', 'dest.txt')
print(f"复制到: {dst}")
# 读取验证
with open('dest.txt', 'r', encoding='utf-8') as f:
print(f"内容: {f.read()}")
# 清理
os.remove('source.txt')
os.remove('dest.txt')
print("清理完成")输出:
代码示例
复制到: dest.txt
内容: Hello, shutil!
清理完成示例2:磁盘信息查询
代码示例
import shutil
# 获取当前磁盘使用情况
usage = shutil.disk_usage('.')
print(f"磁盘使用情况:")
print(f" 总空间: {usage.total / (1024**3):.1f} GB")
print(f" 已使用: {usage.used / (1024**3):.1f} GB")
print(f" 可用空间: {usage.free / (1024**3):.1f} GB")
print(f" 使用率: {usage.used / usage.total * 100:.1f}%")输出:
代码示例
磁盘使用情况:
总空间: 500.0 GB
已使用: 320.5 GB
可用空间: 179.5 GB
使用率: 64.1%示例3:模块功能总览
代码示例
import shutil
print("shutil 模块主要功能:")
functions = {
'文件复制': ['copy', 'copy2', 'copyfile', 'copyfileobj', 'copymode', 'copystat'],
'目录操作': ['copytree', 'rmtree'],
'文件移动': ['move'],
'归档操作': ['make_archive', 'unpack_archive', 'get_archive_formats'],
'系统信息': ['disk_usage'],
'权限管理': ['chmod', 'chown', 'which'],
}
for category, funcs in functions.items():
print(f"\n{category}:")
for func in funcs:
available = hasattr(shutil, func)
status = "可用" if available else "不可用"
print(f" shutil.{func}: {status}")输出:
代码示例
shutil 模块主要功能:
文件复制:
shutil.copy: 可用
shutil.copy2: 可用
shutil.copyfile: 可用
shutil.copyfileobj: 可用
shutil.copymode: 可用
shutil.copystat: 可用
目录操作:
shutil.copytree: 可用
shutil.rmtree: 可用
文件移动:
shutil.move: 可用
归档操作:
shutil.make_archive: 可用
shutil.unpack_archive: 可用
shutil.get_archive_formats: 可用
系统信息:
shutil.disk_usage: 可用
权限管理:
shutil.chmod: 可用
shutil.chown: 可用
shutil.which: 可用实际应用场景
-
文件备份:使用 shutil.copy2() 备份重要文件,保留完整的元数据信息。
-
部署脚本:使用 shutil.copytree() 将构建产物复制到部署目录,使用 make_archive() 打包发布。
-
日志管理:使用 shutil.move() 将旧日志移动到归档目录,使用 disk_usage() 监控磁盘空间。
注意事项
注意1:shutil 的操作是不可逆的(如 rmtree() 会永久删除目录),使用前应确认操作目标正确,建议先在测试环境验证。
注意2:shutil 的文件操作函数在目标已存在时默认会覆盖,不会提示确认。如需避免覆盖,应先检查目标是否存在。
注意3:shutil 的部分函数(如 chown)在 Windows 上功能有限或不可用,跨平台代码应考虑兼容性。
提示:对于大文件复制,shutil.copyfileobj() 可以指定缓冲区大小,比 copyfile() 更节省内存。
相关方法对比
小贴士
shutil 模块是 Python 标准库的一部分,无需额外安装。如果你想查看完整的函数列表,可以在 Python 交互式环境中运行 dir(shutil)。另外,shutil 的官方文档可以参考:Python 官方 shutil 文档
小结
-
shutil 是 Python 标准库中高级文件操作的核心模块
-
功能完整:提供文件复制、移动、删除、归档压缩等完整功能
-
递归支持:支持目录树的递归操作和文件元数据的保留
-
操作不可逆:使用前应确认目标正确
练习题
练习1
使用 shutil.disk_usage() 编写一个磁盘空间监控函数,当可用空间低于阈值时发出警告。
练习2
使用 shutil.which() 查找系统中可用的 Python 解释器路径,并输出结果。
练习3
对比 shutil.copy() 和 os.system('cp') 两种文件复制方式,讨论各自的优缺点。
常见问题
shutil模块需要额外安装吗?
不需要。shutil是Python标准库的一部分,安装Python后即可直接import使用,无需通过pip安装。
shutil和os模块有什么区别?
os模块提供基础的文件系统操作(如创建目录、删除文件),而shutil提供更高级的操作(如递归复制目录、保留元数据的文件复制、归档压缩等)。两者互补使用。
shutil.copy()和shutil.copy2()有什么区别?
copy()复制文件内容和权限,但不保留元数据(修改时间等);copy2()额外保留文件的元数据信息。备份场景推荐使用copy2()。
shutil在Windows上有什么限制?
部分函数如chown(修改文件所有者)在Windows上功能有限。符号链接相关操作也可能受Windows权限限制。跨平台开发时需要注意兼容性测试。
如何用shutil压缩文件夹?
使用shutil.make_archive()函数,支持zip和tar格式。例如:shutil.make_archive('output', 'zip', root_dir) 会将root_dir目录压缩为output.zip。
本文涉及AI创作
内容由AI创作,请仔细甄别