我的知识记录

Python批量修改文件后缀扩展名:一键重命名所有文件类型

用Python pathlib批量修改目录下所有文件的扩展名,比如把.txt改成.md、.jpeg改成.jpg,自动跳过子目录,完整代码。

场景痛点

从某个系统导出的文件全是.jpeg后缀,上传平台只认.jpg;或者一批.txt笔记要统一改成.md做文档管理。手动右键重命名,几十个文件改到手酸,还容易改错。用Python脚本遍历目录,批量替换扩展名,几秒钟搞定。

用到的库

pathlib   # 标准库

完整代码

from pathlib import Path


def batch_change_extension(
dir_path: str,
old_ext: str,
new_ext: str,
recursive: bool = False
) -> int:
"""
批量修改文件扩展名
:param dir_path: 目标目录
:param old_ext: 原扩展名,如 '.txt'
:param new_ext: 新扩展名,如 '.md'
:param recursive: 是否递归子目录
:return: 修改的文件数
"""
root = Path(dir_path)
# 统一后缀格式,确保以点开头
if not old_ext.startswith('.'):
old_ext = '.' + old_ext
if not new_ext.startswith('.'):
new_ext = '.' + new_ext

count = 0
# recursive=False用iterdir只看当前层;True用rglob递归
iterator = root.rglob('*') if recursive else root.iterdir()

for file in iterator:
if not file.is_file():
continue
if file.suffix.lower() != old_ext.lower():
continue

# 新文件名 = 原文件名去掉后缀 + 新后缀
new_name = file.stem + new_ext
new_path = file.with_name(new_name)

# 如果目标已存在,跳过避免覆盖
if new_path.exists():
print(f"[跳过] {file.name} -> {new_name} (目标已存在)")
continue

file.rename(new_path)
count += 1
print(f"[改名] {file.name} -> {new_name}")

print(f"\n完成:共修改 {count} 个文件")
return count


if __name__ == "__main__":
batch_change_extension(
dir_path="./notes",
old_ext=".txt",
new_ext=".md",
recursive=True
)

代码讲解

  • file.suffix:文件扩展名,如.txtfile.stem:去掉扩展名的文件名主体。组合file.stem + new_ext得到新文件名。
  • file.with_name(new_name):把当前路径的文件名部分替换成新名字,目录保持不变。比字符串拼接更安全,自动处理路径分隔符。
  • recursive开关:False时用iterdir()只遍历当前目录;True时用rglob('*')递归所有子目录。
  • 冲突保护:如果新文件名已经存在,跳过不覆盖,避免误删数据。这是重命名脚本必须有的安全检查。
  • 后缀大小写不敏感:.TXT.txt统一按小写比较,Windows文件系统本身不区分大小写。

运行结果

脚本遍历notes/目录(含子目录),把所有.txt文件改名为.md,逐个打印改名记录。例如:

[改名] 日报.txt -> 日报.md
[改名] 会议记录.txt -> 会议记录.md
[跳过] 笔记.txt -> 笔记.md (目标已存在)

完成:共修改 2 个文件

注意事项

  • 重命名操作不可逆。正式跑之前先把file.rename(new_path)注释掉,只打印新名字确认无误再执行。
  • 如果新旧后缀相同(比如都是.txt),脚本会因为new_path.exists()立即跳过,不会出问题。
  • 修改扩展名不会改变文件实际内容。把.png改成.jpg文件照样打不开,浏览器看实际数据。

Python批量修改文件后缀扩展名:一键重命名所有文件类型

标签:

更新时间:2026-09-14 21:31:15

上一篇:Python批量修改文件创建时间和修改时间教程

下一篇:Python 批量按修改日期归档文件:按月分文件夹整理