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

Python批量处理Matlab文件:从键名可变的字典提取目标数据

批量读取Matlab文件并提取目标数据

核心思路

每个.mat文件加载后生成的字典中,除了固定的三个默认键(__header__、__version__、__globals__),剩下的就是你需要的目标数据键。可以通过过滤默认键,或者结合文件名规律来精准定位目标键。

方案一:过滤默认键(通用场景)

适用于每个文件仅包含一个非默认键的情况,代码示例:

import scipy.io
import glob
import numpy as np

# 定义要排除的默认键集合
default_keys = {'__header__', '__version__', '__globals__'}
all_data = []

# 遍历目录下所有.mat文件
for mat_file in glob.glob('/content/*.mat'):
    mat_dict = scipy.io.loadmat(mat_file)
    # 筛选出非默认键
    target_keys = [key for key in mat_dict if key not in default_keys]
    # 提取目标数据(每个文件仅一个目标键,取第一个即可)
    data = mat_dict[target_keys[0]]
    all_data.append(data)

# 转换为numpy数组(若数据维度一致可直接转换,否则保持列表)
all_data_array = np.array(all_data)

方案二:结合文件名匹配键(更精准)

如果文件名和目标键存在对应规律(比如文件名含DE则键也含DE),可以用这种方法避免多键冲突:

import scipy.io
import glob
import numpy as np

all_data = []

for mat_file in glob.glob('/content/*.mat'):
    mat_dict = scipy.io.loadmat(mat_file)
    # 从文件名提取特征标识(如DE/FE)
    file_basename = mat_file.split('/')[-1]
    # 根据标识匹配目标键
    if 'DE' in file_basename:
        target_key = [k for k in mat_dict if 'DE' in k][0]
    elif 'FE' in file_basename:
        target_key = [k for k in mat_dict if 'FE' in k][0]
    else:
        # 处理其他无明确标识的文件
        target_key = [k for k in mat_dict if k not in {'__header__', '__version__', '__globals__'}][0]
    # 提取数据
    data = mat_dict[target_key]
    all_data.append(data)

注意事项

  • 如果存在文件包含多个非默认键的情况,需要先检查len(target_keys),避免索引报错。
  • 若各文件的数据维度不一致,直接转numpy数组会生成object类型数组,此时建议保持列表格式,或统一数据形状后再转换。

内容的提问来源于stack exchange,提问作者Tam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:15:20