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)
该函数递归工作,适用于以下场景:
- 克隆项目模板