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