gpt4 book ai didi

python - fnmatch 和递归路径与 `**` 匹配

转载 作者:太空狗 更新时间:2023-10-30 02:32:24 24 4
gpt4 key购买 nike

是否有任何内置或直接的方法来递归地匹配带有双星号的路径,例如喜欢zsh是吗?

例如,用

path = 'foo/bar/ham/spam/eggs.py'

我可以使用 fnmatch

测试它
fnmatch(path, 'foo/bar/ham/*/*.py'

虽然,我希望能够做到:

fnmatch(path, 'foo/**/*.py')

我知道 fnmatch maps its pattern to regex ,所以在单词情况下,我可以使用额外的 ** 模式滚动我自己的 fnmatch,但也许有更简单的方法

最佳答案

如果您仔细查看 fnmatch 源代码,它会在内部将模式转换为正则表达式,将 * 映射到 .*(而不是 [^/]* 或类似的),因此不关心目录分隔符 / - 与 UNIX shell 不同:

while i < n:
c = pat[i]
i = i+1
if c == '*':
res = res + '.*'
elif c == '?':
res = res + '.'
elif c == '[':
...

因此

>>> fnmatch.fnmatch('a/b/d/c', 'a/*/c')
True
>>> fnmatch.fnmatch('a/b/d/c', 'a/*************c')
True

关于python - fnmatch 和递归路径与 `**` 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com