python';s glob函数是否支持具有可变深度的通配符?

python';s glob函数是否支持具有可变深度的通配符?,python,wildcard,glob,Python,Wildcard,Glob,我正在编写一个python脚本,它使用这种笨拙的glob语法 import glob F = glob.glob('./www.dmoz.org/Science/Environment/index.html') F += glob.glob('./www.dmoz.org/Science/Environment/*/index.html') F += glob.glob('./www.dmoz.org/Science/Environment/*/*/index.html') F += g

我正在编写一个python脚本,它使用这种笨拙的glob语法

import glob    
F = glob.glob('./www.dmoz.org/Science/Environment/index.html')
F += glob.glob('./www.dmoz.org/Science/Environment/*/index.html')
F += glob.glob('./www.dmoz.org/Science/Environment/*/*/index.html')
F += glob.glob('./www.dmoz.org/Science/Environment/*/*/*/index.html')
F += glob.glob('./www.dmoz.org/Science/Environment/*/*/*/*/index.html')
似乎应该有一种方法来包装这是一行:

F = glob.glob('./www.dmoz.org/Science/Environment/[super_wildcard]/index.html')

但我不知道什么是合适的超级通配符。这样的东西存在吗?

对不起,它不存在。您可能需要使用以下方法编写几行代码:


这并不完美,但对我来说很有用:

for i in range(max_depth):  
    components= ['./www.dmoz.org/Science/Environment',]+(['*']*i)+['index.html']
    fsearch=os.path.join(*components)
    fs_res=glob.glob(fsearch)
    if len(fs_res)==1:
        return fs_res[0]
我刚刚发布了一个在ApacheAnt的一个实现中实现您所需的通配符“**”的函数

可通过以下方式执行搜索:

import formic
fileset = formic.FileSet(include="/www.dmoz.org/Science/Environment/**/index.html")
for file_name in fileset.qualified_files():
    # Do something with file_name

这将从当前目录进行搜索。我希望这能有所帮助。

我不知道这是否是新的,但glob现在可以做到这一点

比如说,

F = glob.glob('./www.dmoz.org/Science/Environment/**/index.html', recursive=True)

实际上,我发现ant通配符过程在混合包含和排除时存在缺陷。例如,您不能使用ant通配符来表示此筛选器:“我希望包含目录a/b/c中的所有文件,但排除除readme.txt之外的所有*.txt文件”。perforce实现要好得多,因为它使用模式的顺序使其工作。
F = glob.glob('./www.dmoz.org/Science/Environment/**/index.html', recursive=True)