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

如何按标签读取文件夹中图像与对应文本文件并分类保存图像

按标签分类图像文件的实现方案

问题说明

我的数据集包含两个文件夹:

  • 一个文件夹存放所有图像文件
  • 另一个文件夹存放对应文本标签文件,图像与标签文件名一一对应(例如image_0000.jpeg对应image_0000.txt)
  • 每个标签文件内仅存储0、1、2其中一个数值作为标签
    需要将标签为0、1、2的图像分别整理到对应的目标文件夹中。

注:你提供的read_image_list函数适用于读取**单文件列表(每行含文件名+标签)**的场景,但当前数据集是每个标签对应单独文件,因此需要适配新的实现逻辑。

完整实现代码

import os
import shutil

def sort_images_by_label(image_dir, label_dir, target_root):
    # 提前创建三个标签对应的目标文件夹,不存在则自动创建
    for label in ('0', '1', '2'):
        target_folder = os.path.join(target_root, label)
        os.makedirs(target_folder, exist_ok=True)
    
    # 遍历所有标签文件
    for txt_file in os.listdir(label_dir):
        # 只处理txt格式的标签文件
        if not txt_file.endswith('.txt'):
            continue
        
        # 获取文件名前缀,用于匹配图像
        file_prefix = os.path.splitext(txt_file)[0]
        # 匹配图像文件(支持常见格式,可按需添加)
        image_path = None
        for ext in ('.jpeg', '.jpg', '.png', '.bmp'):
            temp_path = os.path.join(image_dir, f"{file_prefix}{ext}")
            if os.path.exists(temp_path):
                image_path = temp_path
                break
        
        if not image_path:
            print(f"未找到与{txt_file}匹配的图像文件,跳过")
            continue
        
        # 读取标签值
        with open(os.path.join(label_dir, txt_file), 'r') as f:
            label = f.read().strip()
        
        # 过滤无效标签
        if label not in ('0', '1', '2'):
            print(f"{txt_file}中的标签{label}无效,跳过")
            continue
        
        # 复制图像到对应标签文件夹(若要移动文件,将copy2改为move即可)
        dest_path = os.path.join(target_root, label, os.path.basename(image_path))
        shutil.copy2(image_path, dest_path)

# ---------------------- 使用示例 ----------------------
# 替换为你自己的文件夹路径
IMAGE_FOLDER = "你的图像文件夹路径"
LABEL_FOLDER = "你的标签文件夹路径"
TARGET_ROOT = "分类后图像的根文件夹路径"

sort_images_by_label(IMAGE_FOLDER, LABEL_FOLDER, TARGET_ROOT)

代码说明

  • 自动创建目标文件夹:无需手动创建0、1、2三个文件夹,代码会自动生成
  • 多格式图像匹配:支持常见的jpeg、jpg、png、bmp格式,可根据你的图像格式修改ext元组
  • 容错处理:对找不到对应图像、标签无效的情况做了跳过提示,避免程序崩溃
  • 文件操作选项:默认用copy2保留文件元数据,若需要直接移动原文件,替换为shutil.move即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:57:41