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

如何按子文件夹文件数匹配对应文件夹名写入Excel列

问题概述

我需要制作一份Excel表格,第一列写入所有子文件夹内的文件名称,第二列根据各子文件夹包含的文件数量,对应填入每个文件所属的子文件夹名称。

详细说明

指定目录下共有22个子文件夹,每个文件夹包含9-12张数量不等的图片,例如Folder1、Folder2、Folder3、Folder4分别存有12、12、9、11张图片。我已经将22个子文件夹内的所有图片名称写入Excel的一列,需要在另一列对应填入每张图片所属的文件夹名称,预期效果如下:

Image Name  Folder Name
one1.jpg    Folder1
one2.jpg    Folder1
one3.jpg    Folder1
one4.jpg    Folder1
one5.jpg    Folder1
one6.jpg    Folder1
one7.jpg    Folder1
one8.jpg    Folder1
one9.jpg    Folder1
one10.jpg   Folder1
one11.jpg   Folder1
one12.jpg   Folder1
two1.jpg    Folder2
two2.jpg    Folder2
two3.jpg    Folder2
two4.jpg    Folder2
two5.jpg    Folder2
two6.jpg    Folder2
two7.jpg    Folder2
two8.jpg    Folder2
two9.jpg    Folder2
two10.jpg   Folder2
two11.jpg   Folder2
two12.jpg   Folder2
Tree2.jpg   Folder3
.......
当前进展

我编写的代码已接近实现目标,但文件夹名列的写入逻辑存在问题,尚未达到最终效果,现有代码如下:

path1 = os.chdir('/content/drive/MyDrive/Images')

subDirectory = list(os.walk(path1))
sd = subDirectory[0][1]
lengthOFsd = len(sd)
lengthOFsd = (lengthOFsd+1)

# 如需安装xlsxwriter可执行 pip install xlsxwriter
import xlsxwriter

path2 = os.chdir('/content/drive/MyDrive/Research/excle')
workbook = xlsxwriter.Workbook('data_path_reader.xlsx')

# 自定义工作表名称
worksheet = workbook.add_worksheet("First _Sheet")

# 写入表头
worksheet.write('A1', 'Image Name')
worksheet.write('B1', 'Folder Name')
current_directory = os.listdir(path1)
subDirectory = list(os.walk(path1))

row = 1
row2 =1
col = 0
col2 = 0

# 写入第一列:图片名称
for j in range(1,lengthOFsd):
  subd1 = list(subDirectory[j][2])
  for imgname in subd1:
    worksheet.write(row, col, imgname)
    row += 1 

# 写入第二列:文件夹名称(当前逻辑存在错误)
lenoffoldImg = len(subDirectory[1][2])
for flodername in range(0,lenoffoldImg):
  worksheet.write_column(row2, col2 + 1, sd)
  row2 += 1

workbook.close()
问题原因与修正方法

现有代码第二列写入逻辑的核心错误有两点:

  • 仅取了第一个子文件夹的文件数量作为循环依据,没有遍历全部22个子文件夹
  • 直接将所有文件夹名列表一次性写入列,没有按照每个文件夹的实际文件数量重复写入对应文件夹名,导致行和内容完全错位

可以直接将两列写入逻辑合并,遍历子文件夹时同步写入图片名和对应所属文件夹名,从根源避免行号错位问题,修正后的完整代码如下:

import os
import xlsxwriter

# 路径配置
img_root = '/content/drive/MyDrive/Images'
excel_save_dir = '/content/drive/MyDrive/Research/excle'

os.chdir(excel_save_dir)
workbook = xlsxwriter.Workbook('data_path_reader.xlsx')
worksheet = workbook.add_worksheet("First_Sheet")

# 写入表头
worksheet.write('A1', 'Image Name')
worksheet.write('B1', 'Folder Name')

row_idx = 1
# 遍历目录结构
for folder_path, _, file_list in os.walk(img_root):
    # 跳过根目录本身,仅处理子文件夹
    if folder_path == img_root:
        continue
    # 获取当前子文件夹的名称
    current_folder_name = os.path.basename(folder_path)
    # 逐行写入当前文件夹下的所有图片及对应文件夹名
    for img_name in file_list:
        worksheet.write(row_idx, 0, img_name)
        worksheet.write(row_idx, 1, current_folder_name)
        row_idx += 1

workbook.close()

修正逻辑的优势:

  • 不需要分开两次遍历写入两列内容,遍历到哪个文件夹就同步写它下面的所有图片和对应文件夹名,完全不会出现行错位问题
  • 自动适配每个子文件夹下不同数量的图片,不需要手动计算每个文件夹的文件数
  • 去掉了冗余的变量定义和重复的目录扫描步骤,代码更简洁稳定

内容的提问来源于stack exchange,提问作者Md Mahadi Hasan Sany

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:00:58