You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

选定起始.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:32:36