我的知识记录

Python 批量重命名文件教程:os.rename 实战详解

用 Python 标准库 os.rename 批量重命名文件夹下的文件,支持 dry-run 预览,附完整可运行代码与注意事项,适合整理下载、照片、报表等场景。

场景痛点

手动在文件夹里一个一个改文件名,遇到几十上百个文件就是纯体力活。鼠标点半天,还容易手滑改错、改重名,尤其是从相机导出的 IMG_20240101_001.jpg、从网盘下载的一堆乱名文件,想统一成规范命名时全靠人肉。用 Python 的 os.rename 循环一遍改,几秒搞定,还能先预览再动手。

用到的库

本教程只用 Python 标准库,无需 pip 安装:

# os、os.path 为标准库,开箱即用
# 如需递归遍历可用 pathlib,同样是标准库

完整代码

import os

# ========== 配置区 ==========
TARGET_DIR = "./待重命名文件夹"   # 要处理的文件夹路径
DRY_RUN = True                    # True=只预览不改,确认无误后改成 False 再真改
# ============================


def build_new_name(old_name: str) -> str:
"""定义新文件名规则:这里举例把文件名中的空格换成下划线,去掉多余横线。"""
stem, ext = os.path.splitext(old_name)
new_stem = stem.replace(" ", "_").replace("--", "-").strip("-")
return new_stem + ext


def main():
# 校验目录是否存在
if not os.path.isdir(TARGET_DIR):
print(f"目录不存在:{TARGET_DIR}")
return

renamed = 0
# 只遍历当前目录,不递归子文件夹
for name in os.listdir(TARGET_DIR):
old_path = os.path.join(TARGET_DIR, name)
# 只处理文件,跳过文件夹
if not os.path.isfile(old_path):
continue

new_name = build_new_name(name)
if new_name == name:
continue  # 名字没变就跳过

new_path = os.path.join(TARGET_DIR, new_name)

# 防止新名字和已有文件冲突
if os.path.exists(new_path):
print(f"[跳过] 目标已存在,避免覆盖:{new_name}")
continue

action = "[预览]" if DRY_RUN else "[执行]"
print(f"{action} {name}  ->  {new_name}")

if not DRY_RUN:
os.rename(old_path, new_path)
renamed += 1

print(f"\n共处理 {renamed} 个文件(DRY_RUN={DRY_RUN})")
if DRY_RUN:
print("现在只是预览。确认无误后把 DRY_RUN 改成 False 再运行一次。")


if __name__ == "__main__":
main()

代码讲解

  • 配置区:把目录路径和 DRY_RUN 开关放在最上面,改起来一目了然。DRY_RUN=True 时只打印不改名,这是防误操作的关键设计。
  • build_new_name:把命名规则抽成一个函数,想怎么改就在这里改。例子里是把空格换成下划线、把连续横线压成一条。你也可以换成加日期、编号等任意规则。
  • os.listdir 循环:遍历目录下所有条目。os.path.isfile 判断是不是文件,跳过子文件夹,避免把目录也改名。
  • 冲突保护:改名前先检查 os.path.exists(new_path),目标文件已存在就跳过,绝不覆盖。os.rename 在某些系统上会直接覆盖同名文件,这一步必须加。

运行结果

运行后终端会逐条打印 旧名 -> 新名DRY_RUN=True 时只看不改;改成 False 再跑一次,文件就真正被重命名了。对照打印列表确认每条都对,再正式执行。

注意事项

  • 务必先 dry-run:第一次一定让 DRY_RUN=True 看清楚清单,再改成 False。批量操作不可逆,手一抖错了一批很难恢复。
  • 先备份:正式改名前,把整个文件夹复制一份留底,尤其是重要资料。
  • 编码问题:Windows 下中文文件名一般没问题,但如果从别处拷贝过来的乱码文件,先在文件管理器里确认名字正常再跑脚本。
  • 别把脚本目录和目标目录混在一起:避免脚本自己扫到自己。
  • 只改名不递归:本脚本只处理当前层文件;要处理子文件夹请用 os.walk,但递归重命名风险更高,更要先预览。

Python 批量重命名文件教程:os.rename 实战详解

标签:

更新时间:2026-09-14 21:26:37

上一篇:Python批量重命名图片按拍摄时间教程

下一篇:Python 批量去除文件名空格特殊字符:规范命名必备