Python遍历目录获取图片路径如何跳过群晖@eaDir缓存目录
解决群晖@eaDir缓存目录混入图片路径的代码修改方案
核心修改逻辑
- 递归遍历到目录时,先判断目录名是否为
@eaDir,如果是直接跳过不进入递归,从根源避免读取缓存目录内的文件 - 优化图片后缀判断逻辑,统一转小写匹配,减少重复代码,同时自动覆盖所有大小写格式的jpg、jpeg、png文件
- 优化列表拼接逻辑,用
extend()方法替代+运算符,内存效率更高 - 将
import os移到函数外部,避免每次调用函数重复导入模块
修改后的最终代码
import os def getListOfFiles(dirName): allFiles = list() listOfFile = os.listdir(dirName) for entry in listOfFile: fullPath = os.path.join(dirName, entry) if os.path.isdir(fullPath): # 跳过所有层级的@eaDir缓存目录 if entry == '@eaDir': continue allFiles.extend(getListOfFiles(fullPath)) else: # 统一转小写判断后缀,覆盖所有大小写格式的图片 if fullPath.lower().endswith(('.jpg', '.jpeg', '.png')): allFiles.append(fullPath) return allFiles
可选glob实现版本
如果你想改用glob实现,可参考以下写法,核心是判断路径分割后的片段是否包含@eaDir来过滤缓存路径:
import os import glob def getListOfFiles(dirName): allFiles = [] # recursive=True开启全局递归遍历 for file_path in glob.glob(os.path.join(dirName, "**", "*"), recursive=True): # 过滤包含@eaDir的路径 if "@eaDir" in file_path.split(os.sep): continue # 判断是文件且符合图片后缀要求 if os.path.isfile(file_path) and file_path.lower().endswith(('.jpg', '.jpeg', '.png')): allFiles.append(file_path) return allFiles
内容的提问来源于stack exchange,提问作者GKH
相关产品推荐
相关产品推荐

