json与mat格式转换--python版
创始人
2024-05-24 05:13:08
0

前言

本文分享json与mat格式之间相互转换,使用python实现json转为mat,实现mat转为json。

一、json转为mat

思路:

  1. xx.mat文件通常是matlab工具产生的;这里可以使用 scipy.io库中的savemat,来保存mat文件。
  2. xx.json文件,可以用python提供的 json库,对json文件进行读取,解析等操作。

代码如下:


from scipy.io import savemat
import json
import  os# 定义一个函数,用于吧json文件转换为mat
def json_to_mat(json_name, mat_name):fin = open(json_name, encoding='UTF-8')s = json.load(fin)data = dict()for k,v in s.items():data[k] = vsavemat(mat_name, data)fin.close()# mat文件的路径
mat_path = r"./file_path_mat/"# json文件的路径
json_path = r"./file_path_json/"# 遍历文件夹中的json文件,把它们转换为mat文件
files = os.listdir(json_path)
for file in files:file_name = file.split(".")[0]json_name = json_path + filemat_name = mat_path + file_name + '.mat'# xxx.mat to xxx.jsonjson_to_mat(json_name, mat_name)print(mat_name)

二、mat转为json

思路:(基本和上面一致)

  1. xx.mat文件通常是matlab工具产生的;这里可以使用 scipy.io库中的savemat,来保存mat文件。
  2. xx.json文件,可以用python提供的 json库,对json文件进行读取,解析等操作。
  3. 需要注意xx.mat文件中有多少个矩阵/数组,根据其名称,使用datas = mat['xxx'].tolist()提取数据;下面代码有两个矩阵/数组,名称分别为marks、slots。

代码如下:

import json
from scipy.io import loadmat
import osdef dataParse2Json(data='mat_name.mat', save_path='json_name.json'):mat = loadmat(data)# marksdatas = mat['marks'].tolist()marks_list = []for i in range(len(datas)):one_data = datas[i]marks_list.append(one_data)# slotsdatas = mat['slots'].tolist()slots_list = []for i in range(len(datas)):one_data = datas[i]slots_list.append(one_data)# 生成json格式数据marks_slots = { }marks_slots["marks"] = marks_listmarks_slots["slots"] = slots_listreturn_json = json.dumps(marks_slots, ensure_ascii=False)print(return_json)# 把json数据写到对应目录文件with open(save_path, 'w') as f:f.write(return_json)# mat文件的路径
path = r"./file_path_mat/"# json文件的保存路径
save_path = r"./file_path_json/"# 遍历文件夹中的mat文件,把它们转换为json文件
files = os.listdir(path)
for file in files:file_name = file.split(".")[0]mat_name = path + filejson_name = save_path + file_name + '.json'# xxx.mat to xxx.jsondataParse2Json(mat_name, json_name)print(mat_name)

xx.mat文件如下:

{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Jan 13 16:48:33 2023', '__version__': '1.0', '__globals__': [],
'marks': array([[ 86.16408269, 256.16925065,  14.14529143, 281.73859156,  0.        ],[ 38.53617571, 173.48191214,  13.63221104, 182.38779688,  0.        ],[389.13049096, 146.36046512, 495.88547895,  97.80638321,  0.        ],[340.17958656,  70.2881137 , 427.93077225,  33.45790747,  0.        ],[412.28294574, 459.24935401, 430.08704283, 497.468855  ,   0.        ],[287.92118863, 493.64728682, 290.56718346, 498.93927649,   0.        ]]),
'slots': array([[ 1,  2,  2, 80],[ 4,  3,  2, 80],[ 5,  6,  3, 99],[ 7,  5,  1, 90]]
}

转换好的json文件:

{"marks": [[86.16408268733855, 256.16925064599485, 14.145291433563306, 281.738591563921, 0.0], [38.53617571059439, 173.48191214470285, 13.632211035125453, 182.3877968759421, 0.0], [389.1304909560722, 146.36046511627916, 495.88547895419106, 97.8063832091313, 0.0], [340.17958656330745, 70.28811369509049, 427.9307722538273, 33.45790747357878, 0.0], [412.28294573643404, 459.2493540051679, 430.08704282524013, 497.4688549979153, 0.0], [287.921188630491, 493.6472868217054, 290.5671834625323, 498.939276485788, 0.0]], "slots": [[1, 2, 2, 80], [4, 3, 2, 80], [5, 6, 3, 99], [7, 5, 1, 90]]
}

本文只供大家参考学习,谢谢~

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
ChatGPT 怎么用最新详细... ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...