Python文件复制与移动:shutil和os模块完全指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Python文件复制与移动:掌握shutil和os模块

Python开发中经常需要处理文件和目录操作。无论是创建备份、处理用户上传、组织项目结构还是部署应用,这些任务都离不开对文件系统的程序化管理。自动化这些操作能极大简化数据管理,避免重复的手动操作。

Python的shutil模块提供了高级的文件和目录操作工具。结合os模块,它构成了一个强大的跨平台文件系统管理工具集。这两个模块都是Python标准库的一部分,无需额外安装即可使用。

shutil模块概览

shutil模块的名称源自"shell utility"(Shell工具),它提供了一系列用于文件和目录高级操作的函数。主要功能包括:

  • copy() — 复制文件,不保留元数据
  • copy2() — 复制文件,完整保留元数据
  • copytree() — 递归复制整个目录
  • move() — 移动文件和文件夹到新位置
  • rmtree() — 递归删除目录及其内容
  • copyfileobj() — 按字节复制文件对象

shutil模块与os模块无缝集成,既适用于小型自动化脚本,也适用于大型企业级应用。

文件复制方法

基础复制:shutil.copy()

shutil.copy()函数执行简单的文件内容复制,不传输元数据:

import shutil

source = 'source_folder/example.txt'
destination = 'destination_folder/example.txt'
shutil.copy(source, destination)

该函数仅复制文件内容。文件的元数据(包括创建日期、最后修改时间和访问权限)不会被保留。此函数类似于Unix/Linux系统中不带属性保留标志的cp命令。

需要注意的是,如果目标目录不存在,将会报错。建议先检查目标目录是否存在,或通过程序创建它。

保留元数据的复制:shutil.copy2()

当需要保留文件的所有信息(包括时间戳、所有者和访问权限)时,应使用copy2()函数:

shutil.copy2('file.txt', 'backup/file.txt')

此方法在创建备份、在不同系统间迁移项目或需要保留文件原始属性时特别有用。copy2()函数能确保在新位置最大程度地还原原始文件。

目录复制

递归复制:shutil.copytree()

要复制包含所有子目录和文件的整个目录,请使用copytree()函数:

shutil.copytree('old_project', 'new_project')

默认情况下,如果目标目录已存在,copytree()会抛出FileExistsError错误。从Python 3.8开始,可以使用dirs_exist_ok=True参数允许覆盖或补充内容:

shutil.copytree('old_project', 'new_project', dirs_exist_ok=True)

该函数递归工作,适用于以下场景:

  • 克隆项目模板

博客

书籍推荐