Python中操作.mat文件的方法。有时在python得到一些数据,需要作出曲线数据图,但是使用python中的matplotlib库作图比较单一,不能很好的展示图像。那么就需要把数据保存,然后在matlab中作图。代码如下
# -*- coding: utf-8 -*-
"""
@author: Life696
仅供学习、交流使用
"""
import scipy.io as scio
# 假设如下是需要保存到.mat文件中的数据,一共有三组
data1_list = [1,2,3,4,5,6]
data2_list = [6,5,4,3,2,1]
data3_list = [1,3,5]
# 目标文件的位置和名字。位置:和该.py文件同级;名字test_data.mat
# 如这个文件存在就直接写入这个文件;如果不存在就自动创建再写入
dataFile = './test_data.mat'
# 数据保存在.mat文件格式为字典类型,键值对的形式。
scio.savemat(dataFile, {'data1_name' : data1_list,
'data2_name' : data2_list,
'data3_name' : data3_list,
})
print("数据已经保存..........")
matFile = "./test_data.mat"
# 读取出这个.mat文件的数据
mat_data = scio.loadmat(matFile)
print(type(mat_data)) # 打印加载的.mat数据类型,是一个字典,键值对
print("mat_data:" , mat_data) # 打印一下.mat文件数据
# 遍历.mat数据,字典
for i in mat_data:
print("keys:", i) # 打印键值
print(mat_data[i]) # 打印键的值
print("***********")
print("mat_data['data1_name']:", mat_data['data1_name'])
# 根据键,直接查看:mat_data['data1_name']: [[1 2 3 4 5 6]]
# 很明显这是一个列表中的列表
# 索引0的话,就可以完全取出这个列表的数据,索引1会报错哦!
print("mat_data['data1_name'][0]:", mat_data['data1_name'][0])
# mat_data['data1_name'][0]: [1 2 3 4 5 6]
# 遍历这个列表,方式1
for i in mat_data['data1_name'][0]:
print(i)
# 遍历这个列表,方式2
for i in range(len(mat_data['data1_name'][0])):
print(mat_data['data1_name'][0][i])
.mat文件中的数据组织格式如下:
键 | 值() |
__header__ | b'MATLAB 5.0 MAT-file Platform: nt, Created on: Thu Oct 17 14:50:56 2019' |
__version__ | 1.0 |
__globals__ | [] |
data1_name | [[1 2 3 4 5 6]] |
data2_name | [[6 5 4 3 2 1]] |
data3_name | [[1 3 5]] |
... | ... |
注意:
- .mat是一个字典,字典是没有顺序的。
- 不同的机器环境,__header__等键的值可能不同,不过没有什么影响
- data1_name键的值才是之前保存的数据,每一个键对应的值都是一个嵌套列表,使用的时候需要注意
- 源码可以在github上下载:https://github.com/