如何从分类文件夹中的图片生成带标签的CSV文件
解决方案:生成带图片名与对应标签的CSV文件
没问题,我来帮你搞定这个CSV生成的问题!你的核心需求是根据图片所在的文件夹(dog/cat/mouse/elephant)来分配标签,之前的思路误区在于试图从文件名里判断类别——但其实图片是按文件夹分类存放的,从文件所在的父文件夹获取类别才是更准确靠谱的方式。
下面是完整的可运行代码,我会一步步拆解关键逻辑:
import os import csv # 1. 定义类别到标签的映射,和你的文件夹名严格对应 category_label_map = { 'dog': 0, 'cat': 1, 'mouse': 2, 'elephant': 3 } # 2. 你的根路径,注意修正之前的笔误(比如把/content../改成正确的/content/) root_dir = '/content/' # 3. 打开CSV文件准备写入,newline=''避免Windows下出现空行 with open('image_labels.csv', 'w', newline='', encoding='utf-8') as csv_file: # 创建CSV写入器对象 csv_writer = csv.writer(csv_file) # 遍历根目录下的所有文件夹和文件 for current_dir, subdirs, files in os.walk(root_dir): # 跳过根目录本身,只处理子分类文件夹(dog/cat等) if current_dir == root_dir: continue # 从当前文件夹路径中提取类别名称(比如从/content/dog里拿到dog) category_name = os.path.basename(current_dir) # 从映射字典中获取对应的标签,未知类别标记为-1方便排查 label = category_label_map.get(category_name, -1) # 遍历当前文件夹下的所有jpg图片 for file_name in files: # 兼容大小写后缀(比如.JPG) if file_name.lower().endswith('.jpg'): # 写入CSV行:图片名, 对应标签 csv_writer.writerow([file_name, label]) print("CSV文件已成功生成!")
关键细节解释:
- 类别映射字典:
category_label_map把文件夹名和你需要的数字标签绑定,后续如果新增类别,只需要修改这个字典即可,扩展性很强。 - 获取文件夹名:用
os.path.basename(current_dir)从目录路径中提取类别名,完全避免了文件名里可能出现的歧义(比如万一有图片叫cat_dog.jpg就不会判断错)。 - 健壮性处理:
file.lower().endswith('.jpg')兼容大写后缀的图片;category_label_map.get(...)会给未知类别标记-1,方便你快速排查有没有遗漏的分类文件夹。 - 路径修正:注意把
root_dir改成你实际的根目录路径,之前代码里的/content../应该是输入笔误,要调整成正确的路径格式。
运行这段代码后,你会得到完全符合预期格式的CSV文件:
dog1.jpg,0 dog2.jpg,0 cat1.jpg,1 mouse2.jpg,2 elephant.jpg,3
内容的提问来源于stack exchange,提问作者cocojambo
相关产品推荐
相关产品推荐

