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

如何按指定列表顺序为图片添加标签,实现正确重命名格式

解决图片重命名匹配标签的问题

问题根源

你的代码存在两个核心问题:

  1. 文件名拼接错误:直接将标签追加到原文件名后,保留了原有的.png后缀,导致生成原文件名.png_标签.png的错误格式
  2. 文件顺序不匹配:os.listdir()返回的文件是无序的,无法直接和标签列表按顺序一一对应,会出现标签与图片序号错位的情况

正确实现代码

import os
import re

# 你的标签列表
my_label = ["cat", "dog", "horse", "", ...]
path = './images/folder/'

# 筛选出文件夹内的所有png图片文件
image_files = [f for f in os.listdir(path) if f.endswith('.png') and os.path.isfile(os.path.join(path, f))]

# 按文件名中的数字排序,保证image0、image2、image100按数字顺序排列
def get_image_num(filename):
    # 用正则提取文件名里的数字部分
    num_match = re.search(r'image(\d+)\.png', filename)
    if num_match:
        return int(num_match.group(1))
    return 0  # 处理异常文件名

image_files.sort(key=get_image_num)

# 遍历排序后的文件与标签列表
for idx, filename in enumerate(image_files):
    # 跳过标签列表越界或空标签的情况(不需要可删除此判断)
    if idx >= len(my_label) or not my_label[idx]:
        continue
    
    # 拆分文件名和后缀,避免重复添加.png
    name_part, ext_part = os.path.splitext(filename)
    # 构造目标文件名格式
    new_filename = f"{name_part}_{my_label[idx]}{ext_part}"
    # 拼接完整路径(适配不同系统路径分隔符)
    old_full_path = os.path.join(path, filename)
    new_full_path = os.path.join(path, new_filename)
    # 执行重命名
    os.rename(old_full_path, new_full_path)

关键说明

  • 排序逻辑:通过正则提取文件名中的数字,确保文件按数字序号排序,和标签列表的索引一一对应
  • 文件名处理:使用os.path.splitext()拆分文件名和后缀,彻底避免重复后缀问题
  • 边界防护:增加了标签列表长度判断与空标签跳过逻辑,防止索引越界或生成无意义文件名
  • 路径适配:用os.path.join()拼接路径,比直接用字符串拼接更适配Windows、Linux等不同系统

内容的提问来源于stack exchange,提问作者semjad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:10:38