Source code for crikit.io.lazy5.create

""" Macros for creation of HDF5 files and/or datasets"""
import h5py as _h5py

from .config import DefaultConfig
from .utils import (FidOrFile as _FidOrFile, fullpath as _fullpath)
from .inspect import (valid_dsets as _valid_dsets)
from .alter import (write_attr_dict as _write_attr_dict)

_h5py.get_config().complex_names = DefaultConfig().complex_names

[docs]def save(file, dset, data, pth=None, attr_dict=None, mode='a', dset_overwrite=False, sort_attrs=False, chunks=True, verbose=False): """ Save an HDF5 file Parameters ---------- file : str or h5py.File object (fid) Filename dset : str Dataset name (including groups if any) data : ndarray Data to write pth : str Path to file. Otherwise, will use present working directory (PWD) attr_dict : dict Attribute dictionary. Will be Ordered. mode : str h5py file mode. dset_overwrite : bool If a dset already exists, overwrite or raise error? sort_attrs : bool Sort the attribute dictionary (alphabetically) prior to saving chunks : str or tuple or list Chunking shape or True for auto-chunking verbose : bool Verbose output Returns ------- bool : Saved with no errors """ if isinstance(file, str): fp = _fullpath(file, pth) fof = _FidOrFile(fp, mode=mode) elif isinstance(file, _h5py.File): fof = _FidOrFile(file, mode=mode) else: raise TypeError('file needs to be a str or h5py.File object.') fid = fof.fid if not dset_overwrite: if _valid_dsets(fid, dset, pth=pth, verbose=False): err_str1 = 'Dataset {} exists. '.format(dset) err_str2 = 'Param dset_overwrite=False. Will not overwrite' raise IOError(err_str1 + err_str2) dset_id = fid.require_dataset(name=dset, data=data, shape=data.shape, dtype=data.dtype, chunks=chunks) if attr_dict: _write_attr_dict(dset_id, attr_dict, sort_attrs=sort_attrs) fof.close_if_file_not_fid() return True