仅使用 glob 搜索多个模式一次

Search multiple patterns using glob only once

我想使用 glob 函数来查找位于对应于两种不同类型的文件夹名称的文件夹中的文件。

我找到的解决方案很简单:

import glob
files1 = glob.glob('*type1*/*')
files2 = glob.glob('*type2*/*')
files = files1 + files2

有没有办法只用一个 glob 重写它?如果是,会不会更快?

类似

files = glob.glob('*[type1, type2]*/*') 

glob 理解 shell 风格的路径通配,所以你可以简单地做:

files1 = glob.glob('*type[12]*/*')

或者如果你需要扩展到更多数字,像这样(1 到 6):

files1 = glob.glob('*type[1-6]*/*')

只调用一次glob()会更快,因为glob()需要多次读取当前目录和当前目录的每个子目录(在Unix系统上,这是readdir() 函数),每次调用 glob() 时都会重复这些操作。目录内容可能由 OS 缓存,因此不必从磁盘读取,但仍然需要重复调​​用并且 glob() 必须将所有文件名与 glob 进行比较模式。

也就是说,实际上,除非您有数千个文件和子目录,否则性能差异不太可能很明显。