3

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

我认为这会做到这一点:*[!.][!p][!y],但显然fnmatch.fnmatch总是False带着这个返回。

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

4

2 回答 2

4

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

if fnmatch.fnmatch(file, '*[!p][!y]'):
        print(file)
于 2014-08-15T08:17:23.220 回答
3

我相信唯一绝对正确的答案是生成不需要的文件列表,然后找到该列表与完整(未过滤)文件列表之间的区别。(可以在这里看到这种技术,使用sethttps ://stackoverflow.com/a/8645326/1858225 )

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

有关为什么按字符取反不起作用的示例,请参阅我对 user590028 答案的评论。

于 2014-12-01T22:14:15.050 回答