我正在尝试列出目录中与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*]'
但这也不太奏效。有任何想法吗?
答案 0 :(得分:2)
使用fnmatch
或glob
提供的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)