使用fnmatch匹配文件名的两个部分
我现在正在使用 fnmatch
来找到我想复制的文件,同时忽略其他文件。
下面是我脚本的一部分,给大家举个例子,看看我是怎么用的。
pattern = "*.xlsx"
if fnmatch(name, pattern):
source_files.append(os.path.join(path, name))
我发现这个方法现在也匹配到了隐藏文件,而我并不想复制这些文件。
我想到了解决这个问题的三种方法:
- 我可以完全排除隐藏文件。
- 我可以排除那些以
~$
开头的文件。 - 或者我可以只选择那些以
Update
开头并且以.xlsx
结尾的文件。
我觉得用正则表达式来描述我想复制的文件类型是最简单的,但我不确定 fnmatch
是否支持完整的正则表达式。
你有什么建议吗?
1 个回答
2
使用 fnmatch
的功能可以排除某些字符,具体的说明可以在文档中找到。
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
吗?