使用fnmatch匹配文件名的2个部分

时间:2014-09-04 14:34:10

标签: python regex

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

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

pattern = "*.xlsx"

if fnmatch(name, pattern):
    source_files.append(os.path.join(path, name))

我所意识到的是,目前这也是匹配的隐藏文件,我不想复制。

我看到3个解决此问题的方法:

  1. 我可以将隐藏文件排除在外。
  2. 我可以排除以~$开头的文件。
  3. 或者我只能选择以Update 开头且.xlsx
  4. 结尾的文件

    我觉得描述我要复制的文件类型的最简单方法是使用正则表达式,但我不认为fnmatch接受完整的正则表达式。

    你会推荐什么?

1 个答案:

答案 0 :(得分:2)

使用fnmatch能够排除docs

中指定的某些字符
In [33]: fnmatch('hello.xlsx', '[!~]*.xlsx')
Out[33]: True

In [34]: fnmatch('~hello.xlsx', '[!~]*.xlsx')
Out[34]: False

至于您问题中的最后一条评论 - 如果您认为描述文件的最佳方式是使用正则表达式,为什么不将fnmatch替换为re.match(...) is not None?你必须使用fnmatch吗?