-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathfileIO.py
More file actions
119 lines (103 loc) · 3.74 KB
/
fileIO.py
File metadata and controls
119 lines (103 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# -*- coding: utf-8 -*-
"""
Created on Tue Oct 25 21:47:32 2016
@author: Gale
"""
from collections import OrderedDict
import h5py
import numpy as np
try:
from PyQt4 import QtGui as Qt
except:
from PyQt5 import QtWidgets as Qt
def getFile(caption='Choose File',rootDir='',fileType=''):
app = Qt.QApplication.instance()
if app is None:
app = Qt.QApplication([])
output = Qt.QFileDialog.getOpenFileName(None,caption,rootDir,fileType)
filePath = output[0] if isinstance(output,tuple) else output
return str(filePath)
def getFiles(caption='Choose File',rootDir='',fileType=''):
app = Qt.QApplication.instance()
if app is None:
app = Qt.QApplication([])
output = Qt.QFileDialog.getOpenFileNames(None,caption,rootDir,fileType)
filePaths = output[0] if isinstance(output,tuple) else output
return [str(f) for f in filePaths]
def getDir(caption='Choose Directory',rootDir=''):
app = Qt.QApplication.instance()
if app is None:
app = Qt.QApplication([])
dirPath = Qt.QFileDialog.getExistingDirectory(None,caption,rootDir)
return str(dirPath)
def saveFile(caption='Save As',rootDir='',fileType=''):
app = Qt.QApplication.instance()
if app is None:
app = Qt.QApplication([])
output = Qt.QFileDialog.getSaveFileName(None,caption,rootDir,fileType)
filePath = output[0] if isinstance(output,tuple) else output
return str(filePath)
def objToHDF5(obj,filePath=None,fileOut=None,grp=None,saveDict=None,append='False'):
if fileOut is None:
if filePath is None:
filePath = saveFile(fileType='*.hdf5')
if filePath=='':
return
fileOut = h5py.File(filePath,'a')
newFile = fileOut
else:
newFile = None
if grp is None:
grp = fileOut['/']
if saveDict is None:
saveDict = obj.__dict__
for key in saveDict:
if key[0]=='_':
continue
elif isinstance(saveDict[key],(dict,OrderedDict)):
objToHDF5(obj,fileOut=fileOut,grp=grp.create_group(key),saveDict=saveDict[key])
else:
try:
grp.create_dataset(key,data=saveDict[key],compression='gzip',compression_opts=1)
except:
try:
grp[key] = saveDict[key]
except:
try:
grp.create_dataset(key,data=np.array(saveDict[key],dtype=object),dtype=h5py.special_dtype(vlen=str))
except:
print('Could not save: ', key)
if newFile is not None:
newFile.close()
def hdf5ToObj(obj,filePath=None,grp=None,loadDict=None):
if grp is None:
if filePath is None:
filePath = getFile(fileType='*.hdf5')
if filePath=='':
return
grp = h5py.File(filePath,'r')
newFile = grp
else:
newFile = None
for key,val in grp.items():
if isinstance(val,h5py._hl.dataset.Dataset):
v = val[()]
if isinstance(v,bytes):
v = val.asstr()[()]
elif isinstance(v,np.ndarray) and v.dtype==np.object:
v = v.astype('U')
if loadDict is None:
setattr(obj,key,v)
else:
loadDict[key] = v
elif isinstance(val,h5py._hl.group.Group):
if loadDict is None:
setattr(obj,key,{})
hdf5ToObj(obj,grp=val,loadDict=getattr(obj,key))
else:
loadDict[key] = {}
hdf5ToObj(obj,grp=val,loadDict=loadDict[key])
if newFile is not None:
newFile.close()
if __name__=="__main__":
pass