我试图列出目录中匹配的所有文件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)
但这也不太有效。有任何想法吗?
使用fnmatch或glob提供的 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