Python的glob函数支持可变深度通配符吗?
我正在写一个使用这种奇怪的 glob 语法的 Python 脚本。
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')
但是我不知道合适的超级通配符是什么。有没有这样的东西呢?
5 个回答
2
我刚刚发布了一个叫做 Formic 的工具,它实现了你需要的通配符 - '**' - 这个功能是基于 Apache Ant 的 FileSet 和 Globs。
你可以这样来进行搜索:
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
这个搜索会从当前目录开始。我希望这对你有帮助。
3
我不知道这是不是新功能,但现在 glob 可以做到这一点。
比如说,
F = glob.glob('./www.dmoz.org/Science/Environment/**/index.html', recursive=True)
4
抱歉,不能这样做。你可能需要写几行代码,使用 os.walk 这个工具:
for root, dirs, files in os.walk('/starting/path/'):
for myFile in files:
if myFile == "index.html":
print os.path.join(root, myFile)