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

如何利用glob递归遍历文件时提取目录名并写入CSV文件

问题描述

我有cats和dogs两个文件夹,每个文件夹内各有5张JPEG图片(如cat1.jpeg、dog1.jpeg等)。希望生成格式如下的CSV文件:

1,./images/trainnew/dogs/dogs2.jpg,dogs
2,./images/trainnew/dogs/dogs1.jpg,dogs
3,./images/trainnew/cats/cats2.jpg,cats
4,./images/trainnew/cats/cats1.jpg,cats

每行末尾的dogs和cats是trainnew文件夹下对应子文件夹的名称。我使用了以下代码:

from glob import glob
import os
count =1
f = open('test7.csv', 'w')
for filename in glob('./images/trainnew/**/*.jpg', recursive=True):    
    f.write(str(count) + ',' + filename + ',\n')
    print(filename) 
    count +=1

目前生成的test7.csv内容如下:

1,./images/trainnew/dogs/dogs2.jpg,
2,./images/trainnew/dogs/dogs1.jpg,
3,./images/trainnew/cats/cats2.jpg,
4,./images/trainnew/cats/cats1.jpg,

请问如何获取对应的目录名并将其添加到CSV每行的末尾?

解决方案

可以借助os.path模块的方法提取目标子文件夹名称,修改后的代码如下:

from glob import glob
import os

count = 1
# 用with语句自动管理文件,避免手动关闭的遗漏问题
with open('test7.csv', 'w') as f:
    for filename in glob('./images/trainnew/**/*.jpg', recursive=True):
        # 获取文件所在的目录路径,例如从./images/trainnew/dogs/dogs2.jpg得到./images/trainnew/dogs
        dir_path = os.path.dirname(filename)
        # 提取目录的最后一级名称,即dogs或cats
        class_name = os.path.basename(dir_path)
        # 按格式写入完整行内容
        f.write(f"{count},{filename},{class_name}\n")
        print(filename)
        count += 1

关键说明

  • os.path.dirname(filename):获取当前文件所在的完整目录路径
  • os.path.basename(dir_path):从目录路径中提取最后一级的文件夹名称,也就是需要的dogs或cats
  • 使用with语句操作文件,无需手动调用f.close(),更安全可靠
  • 用f-string格式化字符串,代码更简洁易读

内容的提问来源于stack exchange,提问作者Chandrakala Gowda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:23:29