【发布时间】:2014-04-06 11:31:01
【问题描述】:
我的 python 函数有一个(长)路径参数列表,每个参数都可能是一个 glob。我使用glob.glob 遍历此列表以提取所有匹配的文件名,如下所示:
files = [filename for pattern in patterns for filename in glob.glob(pattern)]
这行得通,但是我所在的文件系统对于目录列表操作的性能非常差,目前这个操作增加了我的程序启动时间大约一分钟(!)。因此,我只想对非平凡的 glob 模式(即那些不仅仅是普通路径名的模式)执行 glob 扩展以加快速度。即
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 给定的字符串是否是一个重要的模式,但我不能看看怎么做。
作为后备,我想我可以尝试自己识别字符串中的这些模式,尽管这感觉很像重新发明轮子,而且容易出错。但这感觉像是应该有一个优雅的解决方案。
【问题讨论】: