如何利用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
相关产品推荐
相关产品推荐

