Skip to main content
`Ctrl`+`K`

# `silx.io`: Input-output

- `commonh5`: Helpers for writing h5py-like API
- `configdict`: Configuration files I/O
- `convert`: HDF5 conversion
- `dictdump`: Dumping and loading dictionaries
- `nxdata`: NXdata parsing and validation
- `octaveh5`: Octave HDF5 compatibility
- `specfile`: Reading SpecFile
- `specfilewrapper`: Reading SpecFile (old API)
- `spech5`: h5py-like API to SpecFile
- `fioh5`: h5py-like API to FIO file
- `url`: Utils for data locators
- `utils`: I/O utilities
- `h5py_utils`: HDF5 I/O utilities

## Top-level functions

open(filename)

  Open a file as an h5py-like object.

  Format supported: - h5 files, if h5py module is installed - SPEC files exposed as a NeXus layout - raster files exposed as a NeXus layout (if fabio is installed) - fio files exposed as a NeXus layout - Numpy files (‘npy’ and ‘npz’ files)

  The filename can be trailled an HDF5 path using the separator ::. In this case the object returned is a proxy to the target node, implementing the close function and supporting with context.

  The file is opened in read-only mode.

  Parameters:

    filename (str) – A filename which can containt an HDF5 path by using :: separator.

  Raises:

    IOError if the file can’t be loaded or path can’t be found

  Return type:

    h5py-like node

save1D(fname, x, y, xlabel=None, ylabels=None, filetype=None, fmt='%.7g', csvdelim=';', newline='\n', header='', footer='', comments='#', autoheader=False)

  Saves any number of curves to various formats: Specfile, CSV, txt or npy. All curves must have the same number of points and share the same `x` values.

  Parameters:

    - fname – Output file path, or file handle open in write mode. If `fname` is a path, file is opened in `w` mode. Existing file with a same name will be overwritten.

    - x – 1D-Array (or list) of abscissa values.

    - y – 2D-array (or list of lists) of ordinates values. First index is the curve index, second index is the sample index. The length of the second dimension (number of samples) must be equal to `len(x)`. `y` can be a 1D-array in case there is only one curve to be saved.

    - filetype – Filetype: `"spec", "csv", "txt", "ndarray"`. If `None`, filetype is detected from file name extension (`.dat, .csv, .txt, .npy`).

    - xlabel – Abscissa label

    - ylabels – List of y labels

    - fmt – Format string for data. You can specify a short format string that defines a single format for both `x` and `y` values, or a list of two different format strings (e.g. `["%d", "%.7g"]`). Default is `"%.7g"`. This parameter does not apply to the npy format.

    - csvdelim – String or character separating columns in txt and CSV formats. The user is responsible for ensuring that this delimiter is not used in data labels when writing a CSV file.

    - newline – String or character separating lines/records in txt format (default is line break character `\n`).

    - header – String that will be written at the beginning of the file in txt format.

    - footer – String that will be written at the end of the file in txt format.

    - comments – String that will be prepended to the `header` and `footer` strings, to mark them as comments. Default: `#`.

    - autoheader – In CSV or txt, `True` causes the first header line to be written as a standard CSV header line with column labels separated by the specified CSV delimiter.

  When saving to Specfile format, each curve is saved as a separate scan with two data columns (`x` and `y`).

  CSV and txt formats are similar, except that the txt format allows user defined header and footer text blocks, whereas the CSV format has only a single header line with columns labels separated by field delimiters and no footer. The txt format also allows defining a record separator different from a line break.

  The npy format is written with `numpy.save` and can be read back with `numpy.load`. If `xlabel` and `ylabels` are undefined, data is saved as a regular 2D `numpy.ndarray` (contatenation of `x` and `y`). If both `xlabel` and `ylabels` are defined, the data is saved as a `numpy.recarray` after being transposed and having labels assigned to columns.

get_data(url)

  Returns a numpy data from an URL.

  Examples:

      >>> # 1st frame from an EDF using silx.io.open
      >>> data = silx.io.get_data("silx:/users/foo/image.edf::/scan_0/instrument/detector_0/data[0]")

      >>> # 1st frame from an EDF using fabio
      >>> data = silx.io.get_data("fabio:/users/foo/image.edf::[0]")

  Yet 2 schemes are supported by the function.

  - If silx scheme is used, the file is opened using

      `silx.io.open()` and the data is reach using usually NeXus paths.

  - If fabio scheme is used, the file is opened using `fabio.open()`

      from the FabIO library. No data path have to be specified, but each frames can be accessed using the data slicing. This shortcut of `silx.io.open()` allow to have a faster access to the data.

  See also

  `silx.io.url.DataUrl`

  Parameters:

    url (`str` | `DataUrl`) – A data URL

  Return type:

    Union[numpy.ndarray, numpy.generic]

  Raises:

    - ImportError – If the mandatory library to read the file is not available.

    - ValueError – If the URL is not valid or do not match the data

    - IOError – If the file is not found or in case of internal error of `fabio.open()` or `silx.io.open()`. In this last case more informations are displayed in debug mode.

is_dataset(obj)

  True if the object is a h5py.Dataset-like object.

  Parameters:

    obj – An object

is_group(obj)

  True if the object is a h5py.Group-like object. A file is a group.

  Parameters:

    obj – An object

is_file(obj)

  True is the object is an h5py.File-like object.

  Parameters:

    obj – An object

is_softlink(obj)

  True if the object is a h5py.SoftLink-like object.

  Parameters:

    obj – An object