Python 使用fnmatch匹配文件名的两部分

Python 使用fnmatch匹配文件名的两部分,python,regex,Python,Regex,我目前正在使用fnmatch查找我要复制的文件并忽略其余文件: 下面是我的一些脚本,只是为了举例说明如何使用它 pattern = "*.xlsx" if fnmatch(name, pattern): source_files.append(os.path.join(path, name)) 我所意识到的是,这也是目前匹配的隐藏文件,我不想复制 我看到了解决此问题的3个选项: 我可以将隐藏文件作为一个整体排除 我可以排除以~$开头的文件 或者我只能选择以Update开头,以.xls

我目前正在使用
fnmatch
查找我要复制的文件并忽略其余文件:

下面是我的一些脚本,只是为了举例说明如何使用它

pattern = "*.xlsx"

if fnmatch(name, pattern):
    source_files.append(os.path.join(path, name))
我所意识到的是,这也是目前匹配的隐藏文件,我不想复制

我看到了解决此问题的3个选项:

  • 我可以将隐藏文件作为一个整体排除
  • 我可以排除以
    ~$
    开头的文件
  • 或者我只能选择以
    Update
    开头,以
    .xlsx
    结尾的文件
  • 我觉得描述我想要复制的文件类型的最简单方法是使用正则表达式,但我认为fnmatch不接受完整的正则表达式


    您有什么建议?

    使用
    fnmatch
    排除某些字符的功能,该功能也在


    至于你问题中的最后一条评论——如果你觉得描述文件的最好方法是使用正则表达式,为什么不将
    fnmatch
    替换为
    re。match(…)不是None
    ?您必须使用
    fnmatch

    使用
    fnmatch
    的原因是因为它是我推荐的。我是python新手,尤其是使用python对这样的文件进行操作。所以文件匹配和正则表达式是我从未做过的事情。因此,我对匹配函数缺乏理解。谢谢你的帮助,工作得很有魅力!
    In [33]: fnmatch('hello.xlsx', '[!~]*.xlsx')
    Out[33]: True
    
    In [34]: fnmatch('~hello.xlsx', '[!~]*.xlsx')
    Out[34]: False