Python实现读取目录下文件夹名并设为CSV表头的方法
解决方案:将图片文件夹名设为CSV表头并导出数据
1. 核心逻辑梳理
- 递归遍历指定目录下所有
.jpg格式图片 - 提取每张图片的直接父文件夹名称作为CSV表头
- 按表头分类,将对应图片路径(或自定义数据)写入CSV文件
2. 修正原有代码的错误
原有代码存在两处问题:
- 错误使用
files(文件列表)代替单个文件f调用os.path.abspath() - 缺少CSV文件的写入逻辑
3. 完整实现代码
import glob import os import csv # 递归遍历目标目录下所有jpg图片 image_paths = glob.glob('/content/drive/MyDrive/YOLO_T_ID/yolov5/runs/detect/exp5/crops/**/*.jpg', recursive=True) # 收集文件夹名(表头)与对应图片路径的映射 folder_to_images = {} for img_path in image_paths: # 获取图片所在的直接父文件夹名称 parent_folder = os.path.basename(os.path.dirname(img_path)) # 初始化文件夹对应的图片列表 if parent_folder not in folder_to_images: folder_to_images[parent_folder] = [] # 添加当前图片路径到对应文件夹列表 folder_to_images[parent_folder].append(img_path) # 生成CSV文件 output_csv = 'image_crops_data.csv' with open(output_csv, 'w', newline='', encoding='utf-8') as csv_file: # 创建CSV写入器,指定表头为所有文件夹名 writer = csv.DictWriter(csv_file, fieldnames=folder_to_images.keys()) writer.writeheader() # 按最长的图片列表长度逐行写入,短列表的列补空 max_row_count = max(len(imgs) for imgs in folder_to_images.values()) for idx in range(max_row_count): current_row = {} for folder in folder_to_images.keys(): current_row[folder] = folder_to_images[folder][idx] if idx < len(folder_to_images[folder]) else '' writer.writerow(current_row) print(f"CSV文件已成功生成:{output_csv}")
4. 关键代码说明
- 文件夹名提取:通过
os.path.dirname()获取图片的父目录,再用os.path.basename()提取目录名(即CSV表头名称) - 数据组织:使用字典存储每个文件夹对应的图片路径集合,保证表头与数据的对应关系
- CSV写入:利用
csv.DictWriter实现表头与行数据的匹配,自动处理列对齐,短列表的列填充空值避免格式错误
内容的提问来源于stack exchange,提问作者Umar Aziz
相关产品推荐
相关产品推荐

