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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:40:49