如何使用正则表达式读取目录中匹配指定命名规则的.mat文件
实现方法
匹配规则说明
你需要的文件名对应正则模板为:^stc_{k}.*_alpha\.mat$,各部分含义如下:
^:匹配文件名的起始位置,避免前缀前面有其他字符的文件被误匹配stc_{k}:替换为当前迭代的k值,匹配固定前缀.*:匹配任意数量的任意字符,对应你说的文件名中间的任意内容_alpha\.mat:匹配固定后缀,其中\.是转义写法,用来匹配文件名里真实的点号,避免被正则里的.通配符匹配任意字符$:匹配文件名的结束位置,避免后缀后面有其他字符的文件被误匹配
常用场景代码示例
场景1:Python 实现(适合读取.mat文件的场景)
import re from pathlib import Path import scipy.io as sio # 替换为你的文件所在目录路径 dir_path = Path("./your_file_directory") # 按你的实际需求调整k的迭代范围 for k in range(1, 20): # 生成当前k对应的正则匹配规则 match_pattern = re.compile(rf"^stc_{k}.*_alpha\.mat$") # 遍历目录找匹配文件 for file in dir_path.iterdir(): if file.is_file() and match_pattern.match(file.name): # 找到目标文件,执行读取逻辑 mat_data = sio.loadmat(file) print(f"k={k}对应文件读取完成:{file.name}") # 每个k仅对应一个文件,找到后直接跳出循环节省性能 break
如果你不需要用正则的复杂扩展能力,也可以直接用glob语法实现,写法更简单:dir_path.glob(f"stc_{k}*_alpha.mat")
场景2:Shell/Bash 实现
# 替换为你的文件所在目录路径 DIR="./your_file_directory" # 按你的实际需求调整k的迭代范围 for k in {1..20} do # 查找匹配当前k的文件,-maxdepth 1表示仅遍历当前目录不递归子目录 target_file=$(find "$DIR" -maxdepth 1 -type f -regex ".*/stc_${k}.*_alpha\.mat$") if [ -n "$target_file" ]; then echo "k=${k}对应文件:$target_file" # 这里添加你处理文件的逻辑 fi done
注意事项
- 如果你需要遍历子目录查找文件,去掉Python代码里的遍历限制、或者去掉Shell find命令里的
-maxdepth 1参数即可 - 如果k是字符串而非数字,直接替换正则里的{k}部分即可,逻辑完全一致
内容的提问来源于stack exchange,提问作者Kadaj13
相关产品推荐
相关产品推荐

