考虑这种模式:*.py
. 它匹配所有以扩展名结尾的路径py
。现在,是否有可能找到与其他所有内容匹配的模式?
我认为这会做到这一点:*[!.][!p][!y]
,但显然fnmatch.fnmatch
总是False
带着这个返回。
我想避免使用正则表达式。我知道我可以使用它们,但在这种情况下是不可能的。
考虑这种模式:*.py
. 它匹配所有以扩展名结尾的路径py
。现在,是否有可能找到与其他所有内容匹配的模式?
我认为这会做到这一点:*[!.][!p][!y]
,但显然fnmatch.fnmatch
总是False
带着这个返回。
我想避免使用正则表达式。我知道我可以使用它们,但在这种情况下是不可能的。
我个人更喜欢正则表达式,但如果你更喜欢 fnmatch,你可以这样做:
if fnmatch.fnmatch(file, '*[!p][!y]'):
print(file)
我相信唯一绝对正确的答案是生成不需要的文件列表,然后找到该列表与完整(未过滤)文件列表之间的区别。(可以在这里看到这种技术,使用set
:https ://stackoverflow.com/a/8645326/1858225 )
似乎没有任何内置选项可用于否定fnmatch
模块中的搜索模式。
有关为什么按字符取反不起作用的示例,请参阅我对 user590028 答案的评论。