选定起始.mat文件后,如何批量加载同目录下多测量多通道的.mat文件
解决方案
修改后的完整代码
from tkinter import * from tkinter import filedialog as fd from pathlib import Path import os import scipy.io class Program: def __init__(self, root): # 初始化主窗口 root.resizable(0,0) root.geometry("300x150") root.title("Demo") # 在主窗口上方创建画布 Canvas_One = Canvas(root, width=300, height=150, bg='#%02x%02x%02x' % (240, 240, 240)) Canvas_One.place(x=0, y=0) # 创建按钮 Demo_button = Button(Canvas_One, text="Extract data", width=10, height=2, command=self.load_files) Demo_button.place(anchor='nw', x=10, y=10) def load_files(self): # 浏览.mat文件 self.open_files = fd.askopenfilename(filetypes=[("Matlab Workspace", "*.mat")]) if not self.open_files: # 处理用户取消选择的情况 return file_path = Path(self.open_files) # 获取文件所在目录 self.base_dir = file_path.parent # 获取不带扩展名的文件名,拆分结构 file_stem = file_path.stem # 得到 "LeCroy000_000_ch1" parts = file_stem.split('_') # 拆分为 ['LeCroy000', '000', 'ch1'] # 提取固定前缀(比如LeCroy000) self.prefix = parts[0] # 调用提取数据函数 self.extract_data() def extract_data(self): # 第一层循环:遍历测量编号(000到001) for meas_num in range(2): # 格式化为三位数字字符串,匹配文件名中的000、001格式 meas_str = f"{meas_num:03d}" # 第二层循环:遍历通道(ch1到ch2) for ch_num in range(1, 3): ch_str = f"ch{ch_num}" # 构造完整文件名 file_name = f"{self.prefix}_{meas_str}_{ch_str}.mat" # 构造完整路径 full_path = os.path.join(self.base_dir, file_name) # 检查文件是否存在,避免报错 if os.path.exists(full_path): obj_mat = scipy.io.loadmat(full_path) # 此处添加你的数据处理逻辑,比如打印文件名或解析数据 print(f"已加载文件: {full_path}") else: print(f"文件不存在: {full_path}") Main = Tk() Program(Main) Main.mainloop()
关键修改说明
- 文件名拆分与变量传递:用
Path.stem获取不带扩展名的文件名,通过split('_')拆分出固定前缀,将文件目录和前缀保存为实例变量,确保extract_data方法能访问到这些核心信息。 - 循环生成目标文件名:
- 测量编号:用
f"{meas_num:03d}"将数字格式化为三位带前导零的字符串,完美匹配文件名中的000、001格式。 - 通道:通过
f"ch{ch_num}"直接生成ch1、ch2的通道字符串。
- 测量编号:用
- 路径与错误处理:用
os.path.join拼接合法路径,添加os.path.exists检查,避免因文件缺失导致的加载报错。 - 修复原代码问题:修正了
heigh拼写错误、file.split('_')]的语法错误,以及变量作用域无法访问的问题。
内容的提问来源于stack exchange,提问作者i33SoDA
相关产品推荐
相关产品推荐

