如何遍历子文件夹及所含文件并导出为XLSX/CSV格式文件
实现目录图片清单导出方案
场景说明
指定根目录 /content/drive/MyDrive/imagesFolders/ 下共有22个命名为Folder 1至Folder 22的子文件夹,每个子文件夹内至少存储12张图片,图片格式包含jpg、png等。
根目录结构示例:
Folder 1 Folder 2 Folder 3 Folder 4 ... Folder 22
子文件夹内文件结构示例:
Folder 1/ image1.jpg image2.jpg image3.jpg .... image12.jpg Folder 2/ image1.png image2.jpg image3.jpg .... image12.jpg Folder 3/ image1.jpg image2.png image3.jpg .... image12.jpg
需求是提取所有图片的以下信息,导出为xlsx或CSV格式表格:
- 第一列:图片完整文件名
- 第二列:图片所属子文件夹名称
- 第三列:图片文件扩展名
- 第四列:图片所在文件夹层级
原有代码问题
原有代码仅截取了os.walk返回列表中第二个元素的文件列表,只能拿到第一个子文件夹内的文件名,没有完成全目录遍历、字段结构化提取、文件导出的逻辑。
完整实现代码
首先安装依赖库(如果未安装的话):
pip install pandas openpyxl
执行代码:
import os import pandas as pd # 配置根目录路径 ROOT_PATH = '/content/drive/MyDrive/imagesFolders/' # 配置需要统计的图片格式后缀,可按需扩展 IMAGE_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.bmp', '.gif', '.webp'} record_list = [] for current_dir, _, files in os.walk(ROOT_PATH): # 计算当前目录相对根目录的层级 rel_path = os.path.relpath(current_dir, ROOT_PATH) if rel_path == '.': level = 0 folder_name = '根目录' else: level = len(rel_path.split(os.sep)) folder_name = os.path.basename(current_dir) # 遍历当前目录下所有文件 for file in files: _, ext = os.path.splitext(file) # 过滤非图片文件 if ext.lower() in IMAGE_EXTENSIONS: record_list.append({ '图片名称': file, '所属子文件夹': folder_name, '文件扩展名': ext.lower().lstrip('.'), '文件夹层级': level }) # 转换为表格结构 df = pd.DataFrame(record_list) # 导出为CSV(Excel打开无乱码) df.to_csv('图片文件清单.csv', index=False, encoding='utf-8-sig') # 如需导出xlsx格式,注释上面的CSV导出行,取消下面行的注释即可 # df.to_excel('图片文件清单.xlsx', index=False) print(f'统计完成,共收录{len(df)}条图片记录,文件已导出到当前代码运行目录')
代码说明
- 会自动遍历根目录下所有层级的文件夹,自动过滤非图片格式的文件
- 层级计算规则:根目录层级记为0,Folder1这类直接放在根目录下的子文件夹层级记为1,若子文件夹内还有嵌套文件夹,层级依次累加
- CSV导出默认使用
utf-8-sig编码,直接双击用Excel打开不会出现中文乱码 - 如果需要支持更多图片格式,直接在
IMAGE_EXTENSIONS集合中添加对应后缀即可
内容的提问来源于stack exchange,提问作者Md Mahadi Hasan Sany
相关产品推荐
相关产品推荐

