我的 python 函数有一个(长)路径参数列表,每个参数都可能是一个 glob。我通过这个列表glob.glob
来提取所有匹配的文件名,如下所示:
files = [filename for pattern in patterns for filename in glob.glob(pattern)]
这行得通,但是我所在的文件系统对于目录列表操作的性能非常差,目前这个操作增加了我程序的启动时间大约一分钟(!)。因此,我只想对非平凡的 glob 模式(即那些不仅仅是普通路径名的模式)执行 glob 扩展以加快速度。IE
def cheapglob(pattern):
return [pattern] if istrivial(pattern) else glob.glob(pattern)
files = [filename for pattern in patterns for filename in cheapglob(pattern)]
由于glob.glob
基本上做了一组与 结合的目录列表fnmatch.fnmatch
,我认为应该可以以某种方式询问fnmatch
给定的字符串是否是非平凡的模式,但我不知道该怎么做。
作为后备方案,我想我可以尝试自己识别字符串中的这些模式,尽管这感觉很像重新发明轮子,而且容易出错。但这感觉像是应该有一个优雅的解决方案的那种事情。