You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图片批量重命名求助:从cam1_###.png转为cam1_r###_####_rgb.png

批量修改图片文件名的解决方案

我来帮你搞定这个文件名批量修改的问题!先拆解下你原代码里的几个核心问题:

  • 没有过滤目标文件:os.listdir(".")会把文件夹里所有文件都扫到,很容易误改非图片文件
  • 文件名拼接逻辑错误:你直接在原文件名后加字符串,会生成cam1_000.pngr_1_1.png这种完全不符合要求的格式
  • 整数与字符串直接拼接:代码运行时会直接报错(TypeError),因为不能把int类型的i和str类型直接相加
  • 编号对应关系不对:你的i从1开始,但原文件名的编号是从000开始的,会导致新编号和原文件不匹配
  • 未保证文件顺序:os.listdir返回的文件顺序是不确定的,可能会出现编号混乱的情况

针对你的需求,我写了一段更可靠的代码,能精准提取原文件名里的编号,生成符合要求的新文件名:

import os
import glob

# 获取所有符合原命名规则的图片文件,并按文件名排序(确保编号顺序完全正确)
image_files = sorted(glob.glob("cam1_*.png"))

for file_path in image_files:
    # 提取纯文件名(去掉路径部分)
    filename = os.path.basename(file_path)
    # 分割原文件名,取出三位编号的部分
    _, num_part = filename.split("_")  # 分割后得到 ('cam1', '000.png')
    original_3digit_num = num_part.split(".")[0]  # 提取出'000'
    # 把编号转成整数,用于生成四位补零的编号
    num_value = int(original_3digit_num)
    # 用f-string格式化生成符合要求的新文件名
    new_filename = f"cam1_r{original_3digit_num}_{num_value:04d}_rgb.png"
    # 执行重命名操作(建议先注释掉这行,打印看结果没问题再放开)
    os.rename(file_path, new_filename)
    print(f"已完成重命名: {filename} → {new_filename}")

关键细节说明:

  • 精准匹配文件:用glob.glob("cam1_*.png")只筛选符合原规则的图片,避免误改其他文件
  • 保证顺序正确:sorted()会让文件按文件名排序,对于cam1_000.png到cam1_999.png这种命名,字符串排序和数字顺序完全一致
  • 提取原编号:通过字符串分割直接从原文件名里拿三位编号,避免手动计数可能出现的偏差
  • 格式化编号:num_value:04d会把整数格式化为四位数字,不足的地方自动补零(比如0→0000,99→0099)

安全建议:

在实际执行重命名前,建议先注释掉os.rename那一行,只保留print语句,确认所有新文件名都符合你的预期后,再取消注释执行重命名操作,避免误操作带来的损失。

内容的提问来源于stack exchange,提问作者Jacob W. Dallas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:05:02