Python加载.mat文件遍历对象属性时无法获取最后一个属性值
解决Matlab Struct遍历丢失最后一个属性的问题
问题根源
直接遍历scipy.io加载的Matlab struct对象(mat_struct类型)时,其默认迭代器存在实现缺陷,会遗漏最后一个属性。
修复方案
不要直接遍历对象,而是通过对象的_fieldnames属性获取所有属性名,再逐个取值:
collect_data = [] # 先获取目标对象 target_obj = matFile['some_data'].myObj[0] # 遍历所有属性名 for attr_name in target_obj._fieldnames: # 根据属性名获取对应值 collect_data.append(getattr(target_obj, attr_name))
补充说明
- 先确认对象类型:执行
print(type(target_obj)),如果输出是<class 'scipy.io.matlab.mio5_params.mat_struct'>,则上述方法完全适用。 - 你的原循环代码存在语法错误,缺少冒号,修正后应为:
但即使修正语法,默认迭代器仍会丢失最后一个属性,所以还是推荐用# 原错误写法(缺冒号) # for element in matFile['some_data'].myObj[0] # 正确语法 for element in matFile['some_data'].myObj[0]: collect_data.append(element)_fieldnames的方式。
内容的提问来源于stack exchange,提问作者Vladimir Lorinkov
相关产品推荐
相关产品推荐

