Wed 28 Aug 21:58:08 CEST 2024
This commit is contained in:
parent
727a282df5
commit
3d5bc518bb
77
bin/mat2json.py
Normal file
77
bin/mat2json.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
#!/usr/bin/env python
|
||||
"""
|
||||
Created : 21-06-2018
|
||||
Last Modified : Fri 22 Jun 2018 06:46:45 PM EDT
|
||||
Created By : Enrique D. Angola
|
||||
"""
|
||||
|
||||
import json
|
||||
|
||||
import scipy.io as spio
|
||||
import pandas as pd
|
||||
|
||||
def loadmat(filename):
|
||||
'''
|
||||
this function should be called instead of direct spio.loadmat
|
||||
as it cures the problem of not properly recovering python dictionaries
|
||||
from mat files. It calls the function check keys to cure all entries
|
||||
which are still mat-objects
|
||||
'''
|
||||
data = spio.loadmat(filename, struct_as_record=False, squeeze_me=True)
|
||||
return _check_keys(data)
|
||||
|
||||
def _check_keys(dict):
|
||||
'''
|
||||
checks if entries in dictionary are mat-objects. If yes
|
||||
todict is called to change them to nested dictionaries
|
||||
'''
|
||||
for key in dict:
|
||||
if isinstance(dict[key], spio.matlab.mio5_params.mat_struct):
|
||||
dict[key] = _todict(dict[key])
|
||||
return dict
|
||||
|
||||
def _todict(matobj):
|
||||
'''
|
||||
A recursive function which constructs from matobjects nested dictionaries
|
||||
'''
|
||||
dict = {}
|
||||
for strg in matobj._fieldnames:
|
||||
elem = matobj.__dict__[strg]
|
||||
if isinstance(elem, spio.matlab.mio5_params.mat_struct):
|
||||
dict[strg] = _todict(elem)
|
||||
else:
|
||||
dict[strg] = elem
|
||||
return dict
|
||||
|
||||
def mat2json(filename=None,filepath = ''):
|
||||
"""
|
||||
Converts .mat file to .json and writes new file
|
||||
|
||||
Parameters
|
||||
----------
|
||||
filename: Str
|
||||
path/filename of .mat file
|
||||
filepath: Str
|
||||
path to write converted file
|
||||
|
||||
Returns
|
||||
-------
|
||||
None
|
||||
|
||||
Examples
|
||||
--------
|
||||
>>> mat2json(blah blah)
|
||||
|
||||
"""
|
||||
|
||||
matlabFile = loadmat(filename)
|
||||
#pop all those dumb fields that don't let you jsonize file
|
||||
matlabFile.pop('__header__')
|
||||
matlabFile.pop('__version__')
|
||||
matlabFile.pop('__globals__')
|
||||
#jsonize the file - orientation is 'index'
|
||||
matlabFile = pd.Series(matlabFile).to_json()
|
||||
with open(filepath+filename[0:-4]+'.json','w') as f:
|
||||
f.write(matlabFile)
|
||||
|
||||
mat2json('test.mat')
|
Loading…
Reference in New Issue
Block a user