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

标签 python glob

我想使用 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() 时都会重复这些操作。目录内容可能被操作系统缓存,因此不必从磁盘读取,但仍然需要重复调​​用,并且 glob() 必须将所有文件名与全局模式。

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

关于python - 仅使用一次 glob 搜索多个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68949941/

相关文章:

python - 如何查询Elasticsearch以获取特定的metricbeatdata?

python - 在 Python 中调整 OSX 系统音量

Python 字符串格式 - 旧 `%` 与新 `str.format`

python - 从 OpenWrt makefile 安装 python 模块

perl - 为什么Perl的glob对于其他每个调用都返回undef?

python - glob.glob 读取文件的顺序是什么?如果没有具体顺序,能否指定一个?

Git路径匹配任意目录名

python - 用 scipy 测量地理距离

python - 我可以使用 glob 模式查询数据库吗?

regex - Bash 正则表达式 : Matching numbers 0-1000