请求协助:基于label.csv按类别划分图像数据集至对应文件夹
完善后的代码实现
先说明你原代码的几个问题:
row[]没有指定具体列,需要写对应标签列的名称或索引(比如row['label']或者row[1])- 原代码只是把数据分类存进DataFrame,没实际处理图片文件的移动/复制,这才是你要的核心功能
- pandas的
append方法已经被弃用,推荐用pd.concat
下面是能直接实现图片分类到对应文件夹的完整代码:
import pandas as pd import os import shutil # 1. 配置路径 label_csv_path = 'label.csv' # 你的label文件路径 image_dir = 'images' # 存放所有未分类图片的文件夹路径 output_base_dir = 'classified_images' # 分类后图片的根文件夹 # 2. 读取标签文件,根据实际情况调整header参数 # 如果csv没有列名,用header=None并指定列名;如果有列名直接用pd.read_csv(label_csv_path) df = pd.read_csv(label_csv_path, header=None, names=['image_name', 'label']) # 3. 创建分类文件夹 for label in df['label'].unique(): class_dir = os.path.join(output_base_dir, f'class_{label}') os.makedirs(class_dir, exist_ok=True) # 4. 遍历每一行,移动/复制图片到对应文件夹 for _, row in df.iterrows(): image_name = row['image_name'] label = row['label'] # 构建源文件路径和目标路径 src_path = os.path.join(image_dir, image_name) dst_path = os.path.join(output_base_dir, f'class_{label}', image_name) # 检查源文件是否存在,避免报错 if os.path.exists(src_path): # 复制文件(如果要移动文件,把shutil.copy换成shutil.move) shutil.copy(src_path, dst_path) print(f"已处理: {image_name} -> class_{label}") else: print(f"警告: 文件不存在 {src_path}")
代码说明
- 先配置好三个关键路径:标签文件、原始图片文件夹、分类后输出的根文件夹
- 读取csv时,如果你的label.csv自带列名(比如第一列叫'image',第二列叫'label'),就去掉
header=None, names=['image_name', 'label']这部分,直接用pd.read_csv(label_csv_path) os.makedirs(..., exist_ok=True)确保文件夹不存在时自动创建,存在也不会报错- 用
shutil.copy复制图片,要是想直接移动原始图片,改成shutil.move就行 - 加了文件存在检查,避免因为图片缺失导致程序崩溃
内容的提问来源于stack exchange,提问作者Pranshu Jena
相关产品推荐
相关产品推荐

