Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
		
							parent
							
								
									f995f90ee2
								
							
						
					
					
						commit
						791e9c303d
					
				
							
								
								
									
										69
									
								
								src/SimNDT/gui/mat2json.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/SimNDT/gui/mat2json.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,69 @@ | |||
| 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(matFileName=None,jsonFileName=None): | ||||
|     """ | ||||
|     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(matFileName) | ||||
|     #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' | ||||
|     jsonData = pd.Series(matlabFile).to_json() | ||||
|     with open(jsonFileName,'w') as f: | ||||
|         f.write(jsonData) | ||||
|          | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user