diff --git a/satpy/readers/hdf5_utils.py b/satpy/readers/hdf5_utils.py index 70fd8fdb4c..820f90c4de 100644 --- a/satpy/readers/hdf5_utils.py +++ b/satpy/readers/hdf5_utils.py @@ -38,6 +38,7 @@ def __init__(self, filename, filename_info, filetype_info): super(HDF5FileHandler, self).__init__( filename, filename_info, filetype_info) self.file_content = {} + self._attrs_cache = {} try: file_handle = h5py.File(self.filename, 'r') @@ -51,20 +52,22 @@ def __init__(self, filename, filename_info, filetype_info): file_handle.close() def _collect_attrs(self, name, attrs): + attrs_cache = self._attrs_cache.setdefault(name, {}) for key, value in attrs.items(): value = np.squeeze(value) fc_key = "{}/attr/{}".format(name, key) try: - self.file_content[fc_key] = np2str(value) + value = np2str(value) except ValueError: - self.file_content[fc_key] = value + # use the original value + pass except AttributeError: # A HDF5 reference ? value = self.get_reference(name, key) if value is None: LOG.warning("Value cannot be converted - skip setting attribute %s", fc_key) - else: - self.file_content[fc_key] = value + continue + self.file_content[fc_key] = attrs_cache[key] = value def get_reference(self, name, key): """Get reference.""" @@ -94,9 +97,10 @@ def __getitem__(self, key): # these datasets are closed and inaccessible when the file is closed, need to reopen dset = h5py.File(self.filename, 'r')[key] dset_data = da.from_array(dset, chunks=CHUNK_SIZE) + attrs = self._attrs_cache.get(key, dset.attrs) if dset.ndim == 2: - return xr.DataArray(dset_data, dims=['y', 'x'], attrs=dset.attrs) - return xr.DataArray(dset_data, attrs=dset.attrs) + return xr.DataArray(dset_data, dims=['y', 'x'], attrs=attrs) + return xr.DataArray(dset_data, attrs=attrs) return val diff --git a/satpy/readers/hy2_scat_l2b_h5.py b/satpy/readers/hy2_scat_l2b_h5.py index 5de9c3822b..0ec4104b8f 100644 --- a/satpy/readers/hy2_scat_l2b_h5.py +++ b/satpy/readers/hy2_scat_l2b_h5.py @@ -92,16 +92,12 @@ def get_dataset(self, key, info): dims = ['y', 'x'] if self[key['name']].ndim == 3: dims = ['y', 'x', 'selection'] + data = self[key['name']] if key['name'] in 'wvc_row_time': - data = xr.DataArray(da.from_array(self[key['name']][:]), - attrs={'fill_value': self[key['name']].attrs['fill_value']}, - name=key['name'], - dims=['y', ]) + data = data.rename({data.dims[0]: 'y'}) else: - data = xr.DataArray(da.from_array(self[key['name']][:], - chunks=CHUNK_SIZE), - name=key['name'], dims=dims) - + dim_map = {curr_dim: new_dim for curr_dim, new_dim in zip(data.dims, dims)} + data = data.rename(dim_map) data = self._mask_data(key['name'], data) data = self._scale_data(key['name'], data)