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)三、返回值与异常
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(),它在所有平台上行为一致(都允许覆盖),且是原子操作。
七、重命名方法对比
八、常见问题 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)。
本文涉及AI创作
内容由AI创作,请仔细甄别