78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
|
#!/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')
|