fnmatch-与将特定类型的文件名与数字匹配有关

时间:2018-01-22 20:11:17

标签: python regex

我正在尝试列出目录中与abc_def_[somenumber].json匹配的所有文件。例如,abc_def_001.json可以是文件。

import os, re,fnmatch
pattern = 'abc_def_*'
for f in os.listdir('path of folder'):
   if fnmatch.fnmatch(f, pattern):
      print f

但这并不准确,因为它吐出"abc_def_comparison_001.json"。我试过了

pattern = 'abc_def_[0-9*]'

但这也不太奏效。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

使用fnmatchglob提供的unix样式模式匹配,您可以做的最接近的是:

pattern = 'abc_def_[0-9]*.json'

(会匹配abc_def_122.json,而不是abc_def_something.json但会错误地匹配abc_def_12hello.json)。对于你的例子,它完成了这项工作:

>>> fnmatch.fnmatch("abc_def_comparison_001.json",'abc_def_[0-9]*.json')
False
>>> fnmatch.fnmatch("abc_def_001.json",'abc_def_[0-9]*.json')
True
>>> 

当然,使用正则表达式,您可以匹配您想要的内容:

import re
pattern = re.compile("abc_def_\d+\.json")

并在循环中

if pattern.match(f):

如果你正在使用Windows,则将re.IGNORECASE作为compile方法的第二个参数,因此它的外壳就像fnmatch一样。

答案 1 :(得分:1)

尝试:

pattern = r"abc_def_[\d]+(\.json)"

匹配度:

  • "abc_def_"字面意思
  • 一个或多个数字
  • ".json"字面意思

查看regex101上的模式。