Python中os.rename传入两个相同路径时是否仍会执行重命名操作?
os.rename 同源同目标调用行为解答
基础参数说明
source:类路径对象,代表待重命名的源文件系统路径;
destination:类路径对象,代表目标文件系统路径;
src_dir_fd(可选):指向目录的文件描述符;
dst_dir_fd(可选):指向目录的文件描述符;
返回类型:该方法无任何返回值。
单次执行 os.rename(original, original) 的运行结果
正常情况下(original 路径真实存在、且当前进程持有该路径的读写操作权限),该调用属于空操作:不会抛出异常,也不会对目标文件/目录的内容、属性、权限产生任何修改。
存在例外情况时会抛出对应异常:
- 目标路径不存在:抛出
FileNotFoundError - 进程无对应路径操作权限:抛出
PermissionError - 目标为目录且被其他进程锁定:部分系统会抛出
OSError
注:Windows系统下如果目标文件正被其他进程以独占模式占用,即使源和目标路径完全一致,也会抛出权限错误
大量执行该操作的不良影响
该操作本身不会损坏文件数据,但仍可能产生不必要的资源开销:
- 本地存储场景:每次调用都会触发一次系统调用,占用不必要的CPU资源,调用量级过高时会拖慢当前进程的响应速度
- 网络挂载存储(NFS、SMB等)场景:每次调用都会产生网络IO请求,除占用本地CPU外,还会消耗存储服务器的处理资源与带宽,严重时会影响同存储集群下的所有业务访问
- 若批量调用的大量路径不存在:每次调用都会产生异常栈,异常的生成与捕获会带来额外性能开销,极端情况下可能导致进程卡顿甚至崩溃
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

