图片批量重命名求助:从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
相关产品推荐
相关产品推荐

