json与mat格式转换--python版
Posted 一颗小树x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json与mat格式转换--python版相关的知识,希望对你有一定的参考价值。
前言
本文分享json与mat格式之间相互转换,使用python实现json转为mat,实现mat转为json。
一、json转为mat
思路:
- xx.mat文件通常是matlab工具产生的;这里可以使用 scipy.io库中的savemat,来保存mat文件。
- 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] = v
savemat(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 + file
mat_name = mat_path + file_name + '.mat'
# xxx.mat to xxx.json
json_to_mat(json_name, mat_name)
print(mat_name)
二、mat转为json
思路:(基本和上面一致)
- xx.mat文件通常是matlab工具产生的;这里可以使用 scipy.io库中的savemat,来保存mat文件。
- xx.json文件,可以用python提供的 json库,对json文件进行读取,解析等操作。
- 需要注意xx.mat文件中有多少个矩阵/数组,根据其名称,使用datas = mat['xxx'].tolist()提取数据;下面代码有两个矩阵/数组,名称分别为marks、slots。
代码如下:
import json
from scipy.io import loadmat
import os
def dataParse2Json(data='mat_name.mat', save_path='json_name.json'):
mat = loadmat(data)
# marks
datas = mat['marks'].tolist()
marks_list = []
for i in range(len(datas)):
one_data = datas[i]
marks_list.append(one_data)
# slots
datas = 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_list
marks_slots["slots"] = slots_list
return_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 + file
json_name = save_path + file_name + '.json'
# xxx.mat to xxx.json
dataParse2Json(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]]
本文只供大家参考学习,谢谢~
以上是关于json与mat格式转换--python版的主要内容,如果未能解决你的问题,请参考以下文章