pin_drop当前位置:知识文库 ❯ 图文

Python os.rename()重命名文件用法详解 - 移动与批量操作

一、os.rename() 概述

os.rename() 是 Python os 模块中用于重命名文件或目录的函数。除了改名之外,它还可以用来移动文件或目录到不同位置。

需要注意,os.rename() 在不同操作系统上行为不同。Unix/Linux 上目标已存在会静默覆盖;Windows 上目标已存在会抛出 FileExistsError 异常。


二、语法与参数说明

函数语法

代码示例

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
参数 类型 说明
src str / bytes 源文件或目录的路径
dst str / bytes 目标文件或目录的新路径

三、返回值与异常

os.rename() 没有返回值。常见异常:

  • FileNotFoundError:源文件不存在

  • FileExistsError:Windows 上目标已存在

  • PermissionError:没有权限或文件被占用

  • OSError:跨文件系统移动可能失败


四、代码示例

示例1:重命名文件

代码示例

import os

with open('old_name.txt', 'w', encoding='utf-8') as f:
    f.write('hello world')

os.rename('old_name.txt', 'new_name.txt')
print(f"旧文件存在: {os.path.exists('old_name.txt')}")
print(f"新文件存在: {os.path.exists('new_name.txt')}")

输出:

代码示例

旧文件存在: False
新文件存在: True

示例2:重命名目录

代码示例

import os

os.makedirs('old_dir', exist_ok=True)
os.rename('old_dir', 'new_dir')
print(f"旧目录存在: {os.path.exists('old_dir')}")
print(f"新目录存在: {os.path.exists('new_dir')}")

输出:

代码示例

旧目录存在: False
新目录存在: True

示例3:使用 rename 移动文件

代码示例

import os

os.makedirs('source', exist_ok=True)
os.makedirs('dest', exist_ok=True)

with open('source/file.txt', 'w', encoding='utf-8') as f:
    f.write('content')

os.rename('source/file.txt', 'dest/file.txt')
print(f"源文件存在: {os.path.exists('source/file.txt')}")
print(f"目标文件存在: {os.path.exists('dest/file.txt')}")

输出:

代码示例

源文件存在: False
目标文件存在: True

五、实际应用场景

  • 批量重命名:按规则批量重命名文件(添加日期前缀、统一格式等)

  • 日志轮转:将旧日志重命名为带日期的备份名

  • 文件处理流水线:处理完成后将文件移到 done 目录


六、注意事项

注意:Windows 上目标文件已存在会抛出 FileExistsError,Unix 上会静默覆盖。

注意:跨文件系统移动文件可能失败,跨盘符移动请使用 shutil.move()

注意os.renames() 会自动创建中间目录,是更安全的替代方案。

小贴士

Python 3.3+ 推荐使用 os.replace(),它在所有平台上行为一致(都允许覆盖),且是原子操作。


七、重命名方法对比

方法 跨文件系统 自动创建目录 覆盖目标
os.rename() 可能失败 Unix 可以,Windows 报错
os.renames() 可能失败 同 os.rename()
shutil.move() 支持 同 os.rename()

八、常见问题 FAQ

os.rename() 能否跨盘符移动文件?

不能。os.rename() 只能在同一文件系统内操作。跨盘符(如 C 盘到 D 盘)移动请使用 shutil.move(),它会自动处理跨文件系统的复制+删除。

如何处理目标文件已存在的情况?

可以先用 os.path.exists() 检查,如果存在则自动添加编号后缀(如 file_1.txt、file_2.txt)。也可以使用 os.replace() 直接覆盖。

os.rename() 和 os.replace() 有什么区别?

os.replace() 在所有平台上都允许覆盖目标文件,行为一致。os.rename() 在 Windows 上目标存在会报错。推荐使用 os.replace() 实现跨平台一致的覆盖语义。

如何批量重命名文件?

结合 os.listdir() 遍历目录,对每个匹配的文件计算新名称,然后调用 os.rename()。建议先打印预览再实际执行,避免误操作。


练习题

练习1

编写程序,将当前目录下所有 .txt 文件重命名为 .bak 文件。

练习2

编写函数 safe_rename(src, dst),安全地重命名文件,当目标已存在时自动在文件名后添加编号(如 file_1.txt、file_2.txt)。

标签: Python os.rename 重命名 移动文件 os模块

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python os.remove()删除文件用法详解 - 安全操作与异常处理 下一篇: Python os.stat()获取文件信息用法详解 - 大小时间与权限

poll相关推荐