否定fnmatch模式

时间:2014-08-15 08:13:14

标签: python glob fnmatch

考虑这种模式:*.py。它匹配以py扩展名结尾的所有路径。现在,是否有可能找到匹配其他所有内容的模式

我认为会这样做:*[!.][!p][!y],但显然fnmatch.fnmatch总是会返回False

我想避免正则表达式。我知道我可以使用它们,但在这种情况下它是不可能的。

2 个答案:

答案 0 :(得分:4)

我个人更喜欢正则表达式,但如果你更喜欢fnmatch,你可以这样做:

if fnmatch.fnmatch(file, '*[!p][!y]'):
        print(file)

答案 1 :(得分:2)

我认为唯一绝对正确的答案是生成不需要的文件列表,然后找到此列表与完整(未过滤)文件列表之间的差异。 (此处可以使用sethttps://stackoverflow.com/a/8645326/1858225

查看此技术

似乎没有任何内置选项可以否定fnmatch模块中的搜索模式。

有关为什么字符否定无法发挥作用的示例,请参阅我对user590028答案的评论。