遍历多文件夹时校验指定子文件夹存在性的技术求助
帮你修正文件夹检查的代码问题
嘿,我看了你的代码,现在逻辑有点绕,而且还有路径不一致的小问题,咱们一步步来调整,实现你想要的功能:遍历指定路径下的文件夹,检查每个目标文件夹里是否同时存在One、Two、Three这三个文件夹,缺任意一个就打印该文件夹的路径/名称。
先说说你现有代码的几个问题:
- 路径不统一:你用
os.walk('/mnt/sdc1/Mahajan/')获取文件夹,但path变量是/mnt/sdc1/Username/,这会导致拼接出来的路径错误,根本找不到目标文件夹 - 循环嵌套冗余,逻辑判断不准确:你嵌套了多层循环,而且只是逐个检查文件/文件夹是否在目标列表里,会重复输出
Good或NotGood,没有判断三个文件夹是否同时存在
修正后的代码方案
方案1:遍历根路径下的一级子文件夹(最常用的场景)
假设你要检查的是/mnt/sdc1/Username/下的每一个一级子文件夹,看它们内部是否同时有One、Two、Three:
import os # 定义必须存在的三个文件夹名 required_folders = ['One', 'Two', 'Three'] # 根路径,统一成你实际要遍历的路径 root_path = '/mnt/sdc1/Username/' # 遍历根路径下的所有项目 for item in os.listdir(root_path): item_path = os.path.join(root_path, item) # 只处理文件夹,跳过文件 if not os.path.isdir(item_path): continue # 检查三个文件夹是否都存在于当前子文件夹中 all_folders_exist = all( os.path.isdir(os.path.join(item_path, sub_folder)) for sub_folder in required_folders ) # 如果不全存在,打印路径 if not all_folders_exist: print(f"缺少必要文件夹的路径:{item_path}")
方案2:遍历所有层级的文件夹(如果需要检查深层文件夹)
如果你要遍历根路径下所有层级的文件夹(包括子文件夹的子文件夹),可以用os.walk更高效:
import os required_folders = ['One', 'Two', 'Three'] root_path = '/mnt/sdc1/Username/' # 遍历所有层级的文件夹,dirpath是当前文件夹的完整路径 for dirpath, _, _ in os.walk(root_path): # 检查当前文件夹下是否同时存在三个目标文件夹 all_folders_exist = all( os.path.isdir(os.path.join(dirpath, sub_folder)) for sub_folder in required_folders ) if not all_folders_exist: print(f"缺少必要文件夹的路径:{dirpath}")
代码说明
- 用
os.path.join拼接路径:避免手动加斜杠导致的跨系统问题,也更规范 all()函数:一次性判断三个条件是否都满足,比逐个写if简洁很多- 先判断是否为文件夹:避免把文件当成文件夹处理,导致错误
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

