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