如何按子文件夹文件数匹配对应文件夹名写入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
相关产品推荐
相关产品推荐

