python';s glob函数是否支持具有可变深度的通配符?
我正在编写一个python脚本,它使用这种笨拙的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
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)