3
3
import warnings
4
4
5
5
import numpy as np
6
+ import pandas as pd
6
7
from pandas import HDFStore
7
8
8
9
from larray .core .array import Array
@@ -111,13 +112,14 @@ def read_hdf(filepath_or_buffer, key, fill_value=nan, na=nan, sort_rows=False, s
111
112
key = np .char .decode (key , 'utf-8' )
112
113
axis = read_hdf (filepath_or_buffer , attrs ['axis_key' ])
113
114
res = LGroup (key = key , name = name , axis = axis )
115
+ elif _type == 'scalar' :
116
+ res = pd_obj .values
117
+ # XXX : assert len(res) == 1 ?
118
+ if len (res ) == 1 :
119
+ res = res [0 ]
114
120
except KeyError :
115
- scalar_key = key
116
- attrs = store .root ._v_attrs
117
- if scalar_key not in attrs ._v_attrnamesuser :
118
- filepath = filepath_or_buffer if isinstance (filepath_or_buffer , HDFStore ) else store .filename
119
- raise KeyError ('No item with name {} has been found in file {}' .format (key , filepath ))
120
- res = attrs [scalar_key ]
121
+ filepath = filepath_or_buffer if isinstance (filepath_or_buffer , HDFStore ) else store .filename
122
+ raise KeyError ('No item with name {} has been found in file {}' .format (key , filepath ))
121
123
return res
122
124
123
125
@@ -132,15 +134,11 @@ def _open_for_read(self):
132
134
def _open_for_write (self ):
133
135
self .handle = HDFStore (self .fname )
134
136
135
- @property
136
- def attrs (self ):
137
- return self .handle .root ._v_attrs
138
-
139
137
def list_items (self ):
140
138
keys = [key .strip ('/' ) for key in self .handle .keys ()]
141
139
items = []
142
140
# scalars
143
- items += [(key , 'scalar' ) for key in self . attrs . _v_attrnamesuser if key != 'metadata' ]
141
+ items += [(key . split ( '/' )[ - 1 ] , 'scalar' ) for key in keys if '__scalars__' in key ]
144
142
# axes
145
143
items += [(key .split ('/' )[- 1 ], 'Axis' ) for key in keys if '__axes__' in key ]
146
144
# groups
@@ -157,7 +155,7 @@ def _read_item(self, key, type, *args, **kwargs):
157
155
elif type == 'Group' :
158
156
hdf_key = '__groups__/' + key
159
157
elif type == 'scalar' :
160
- hdf_key = key
158
+ hdf_key = '__scalars__/' + key
161
159
else :
162
160
raise TypeError ()
163
161
return read_hdf (self .handle , hdf_key , * args , ** kwargs )
@@ -174,9 +172,10 @@ def _dump_item(self, key, value, *args, **kwargs):
174
172
hdf_axis_key = '__axes__/' + value .axis .name
175
173
value .to_hdf (self .handle , hdf_key , hdf_axis_key , * args , ** kwargs )
176
174
elif isinstance (value , _supported_scalar_types ):
177
- if key in self .attrs ._v_attrnamessys + ['metadata' ]:
178
- raise KeyError ("Key '{}' cannot be used because it is a protected name" .format (key ))
179
- self .attrs [key ] = value
175
+ hdf_key = '__scalars__/' + key
176
+ s = pd .Series (value )
177
+ self .handle .put (hdf_key , s )
178
+ self .handle .get_storer (hdf_key ).attrs .type = 'scalar'
180
179
else :
181
180
raise TypeError ()
182
181
0 commit comments