你没有透露k的域,但是根据cmets,它似乎是一个数字。
如果每个k 只有一个文件,您可以简单地循环这些文件。
for knum in range(kmin, kmax+1):
for file in glob.glob("stc_%i*_alpha.mat" % knum):
# Only expect one match
process(file)
如果您真的很想为此使用正则表达式,那么数字 7 到 24 的正则表达式就是 (?:7|8|9|10|11|...|23|24)(可以简化为 (?:[7-9]|1[0-9]|2[0-4]),但在这里,它可能不值得努力)。
os.listdir 将返回按字母排序的匹配文件;如果您需要不同的排序顺序,可以使用os.scandir 并提供您自己的排序功能。
my_files = []
for file in os.scandir(directory):
m = re.match(r'stc_(\d+).*_alpha\.mat', file)
if m:
# Maybe you only care about a particular range for k?
kcurr = int(m.group(1))
if kcurr < 7 or kcurr > 24:
continue
my_files.append(kcurr, file))
my_files = [x[1] for x in sorted(my_files)]
这里,我们使用正则表达式分组括号来提取包含排序键和文件名的元组,然后在排序后丢弃排序键,只保留匹配文件的排序列表。 (另见Schwarzian transform.)
跳过小于 7 或大于 24 的值的 if 子句演示了如何仅覆盖特定数字;如果你不需要那个,显然把它拿出来。
访问磁盘的速度比处理内存中的数据慢 1000 倍,因此您通常希望避免重复访问磁盘。