能否用单个glob匹配模式同时查找.yaml和.yml文件?
单个glob模式匹配.yml和.yaml文件的可行性
结论
Python标准库的glob模块无法通过单个Unix风格glob模式同时匹配.yml和.yaml文件。
原因分析
Unix风格glob仅支持以下有限的通配符规则:
*:匹配任意长度的任意字符(不含路径分隔符)?:匹配单个任意字符[]:匹配括号内的单个字符/字符范围
而.yml(4字符后缀)和.yaml(5字符后缀)的长度不同,glob语法没有“可选字符”的分支匹配能力(这类逻辑属于正则表达式的(a)?语法),因此无法用单个模式覆盖两种长度不同的后缀。
无效尝试解析
glob.glob("*.ya?ml"):该模式要求后缀为ya+1个任意字符+ml,总长度为5,仅能匹配.yaml,无法匹配长度为4的.yml,故返回空列表。glob.glob("*.y[a]ml"):[a]仅匹配单个a,等价于*.yaml,只能匹配.yaml文件。
补充说明
若要通过单个表达式实现匹配,需借助正则表达式(比如结合os.listdir和re.match),但这已经脱离了纯glob模式的范畴。如果仅使用glob模块,只能通过两次调用glob.glob(glob.glob("*.yml") + glob.glob("*.yaml"))来实现需求。
内容的提问来源于stack exchange,提问作者no step on snek
相关产品推荐
相关产品推荐

