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

use*_*614 4 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
Run Code Online (Sandbox Code Playgroud)

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

pattern = 'abc_def_[0-9*]'
Run Code Online (Sandbox Code Playgroud)

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

Jea*_*bre 5

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

pattern = 'abc_def_[0-9]*.json'
Run Code Online (Sandbox Code Playgroud)

(会匹配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
>>> 
Run Code Online (Sandbox Code Playgroud)

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

import re
pattern = re.compile("abc_def_\d+\.json")
Run Code Online (Sandbox Code Playgroud)

并在循环中

if pattern.match(f):
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Windows,则将re.IGNORECASE其作为该方法的第二个参数抛出,因此它的行为类似于外壳。compilefnmatch