将 netsted 字典保存到 hdf 或 netCDF
save a netsted dictionary to hdf or netCDF
一般情况下,将字典保存到hdf或netCDF是很直接的。例如 。
但是如何处理嵌套字典。例如下面的字典:
test = {'temp': {'unit': 'K', 'data': [273.,298.,315.]}, 'press': {'unit': 'hPa', 'data': [800.,900.,1000.]}}
请注意,嵌套可以进行到多层。所以我需要 netCDF 或 hdf
组中的子组
也许类似此功能的东西可以提供帮助。我在这里为你的例子定制了它,但如果你能提供一个属性字典并使其工作类似于 'data',它会更好。我正在使用 xarray 来演示如何获取数据集变量,但您可以将这个想法转移到您选择的工具中。
import xarray as xr
def create_variable(dataset, var, test, dimensions):
data = test[var]['data']
attrs = {'unit':test[var]['unit']}
v = xr.Variable(dimensions, data, attrs=attrs)
dataset[var] = v
return var
没关系,我找到答案了
将 numpy 导入为 np
导入 h5py
def dict2hdf5(filename, dic):
with h5py.File(filename, 'w') as h5file:
recursive_dict2hdf5(h5file, '/', dic)
def recursive_dict2hdf5(h5file, path, dic):
for key, item in dic.items():
if not isinstance(key, str):
key = str(key)
if isinstance(item, (np.ndarray, np.int64, np.float64, str, bytes)):
h5file[path + key] = item
elif isinstance(item, list):
h5file[path + key] = np.array(item)
elif isinstance(item, dict):
recursive_dict2hdf5(h5file, path + key + '/',
item)
else:
raise ValueError('Cannot save %s type' % type(item))
一般情况下,将字典保存到hdf或netCDF是很直接的。例如
test = {'temp': {'unit': 'K', 'data': [273.,298.,315.]}, 'press': {'unit': 'hPa', 'data': [800.,900.,1000.]}}
请注意,嵌套可以进行到多层。所以我需要 netCDF 或 hdf
组中的子组也许类似此功能的东西可以提供帮助。我在这里为你的例子定制了它,但如果你能提供一个属性字典并使其工作类似于 'data',它会更好。我正在使用 xarray 来演示如何获取数据集变量,但您可以将这个想法转移到您选择的工具中。
import xarray as xr
def create_variable(dataset, var, test, dimensions):
data = test[var]['data']
attrs = {'unit':test[var]['unit']}
v = xr.Variable(dimensions, data, attrs=attrs)
dataset[var] = v
return var
没关系,我找到答案了
将 numpy 导入为 np 导入 h5py
def dict2hdf5(filename, dic):
with h5py.File(filename, 'w') as h5file:
recursive_dict2hdf5(h5file, '/', dic)
def recursive_dict2hdf5(h5file, path, dic):
for key, item in dic.items():
if not isinstance(key, str):
key = str(key)
if isinstance(item, (np.ndarray, np.int64, np.float64, str, bytes)):
h5file[path + key] = item
elif isinstance(item, list):
h5file[path + key] = np.array(item)
elif isinstance(item, dict):
recursive_dict2hdf5(h5file, path + key + '/',
item)
else:
raise ValueError('Cannot save %s type' % type(item))