Manipulating links in a HDF5 file using Python library h5py

Overview:

  • Any HDF5 Dataset or a group inside a HDF5 file can be made a link.
  • The link can be of the following types:
    • Hard link
    • Soft link
    • External link

Hard links in HDF5:

  • All datasets in a HDF5 file are objects. All the groups as well inside a HDF5 file are objects.
  • These objects are identified by the name given to them at the time of their creation and by more names given after their creation.

file[“/D1”] = 10;

file[“/D2”] = file[“/D1”];

  • These names referred using dictionary notation are links to the objects. Unless the links are symbolic links (soft link or external link), they are hard links. Hard links are reference counted. If the reference count is zero as in the case of objects with the name None, the objects are deleted from the file. i.e., as identity is lost for the object, it can never be referred and no point for it occupy disk space in the file.
  • Hard links are created for the objects as given in the name parameter of the methods create_group(), create_dataset(). The successful execution of File(), results in a link corresponding to the group /(root). The name of the /(root) cannot be None or anything else. But the name of the groups and datasets underneath /(root) can be user defined including None.
  • Hard links are also created using the dictionary notation.

Example:

# Example Python program that creates hard links to

# HDF5 groups and datasets

import h5py

 

# Create a HDF5 file

hdf5File    = h5py.File("HDFWithlinks.hdf5", "w");

 

# Create a group

hgrp = hdf5File.create_group("G1")

 

# Create a link to the group

hdf5File["GLink"] = hgrp;

 

# Create a dataset

dataShape = (5,5);

ds1 = hdf5File.create_dataset("/G1/D1", dataShape);

 

# Create links to the dataset

hdf5File["DLink1"]      = ds1;

hdf5File["DLink2"]      = ds1;

 

# Assign values to the HDF5 dataset using one link

hdf5File["DLink1"][0,0] = 10;

 

# Read from the HDF5 dataset through another link

print(hdf5File["DLink2"][0,0]);

 

hdf5File.close();

 

Output:

10.0

Soft links in HDF5:

  • Soft links contain just the text path rather than a pointer or the address to the object itself.

Example:

# Example Python program that creates a soft link in a HDF5 file

# using H5py

import h5py

 

# Create a HDF5 file

f   = h5py.File("Sample.HDF5", "w");

 

# Create a dataset at root level

d1  = f.create_dataset("/D1", (8, 8));

 

# Create a soft link for the dataset

sl = h5py.SoftLink("/D1");

 

# Print info on dataset and soft link

print(d1);

print(sl);

print("The hierarchical path to the HDF5 object:%s"%(sl.path));

f.close();

 

Output:

<HDF5 dataset "D1": shape (8, 8), type "<f4">

<SoftLink to "/D1">

The hierarchical path to the HDF5 object:/D1

External Links in HDF5:

  • An external link from a HDF5 file refers to a HDF5 Dataset or a HDF5 group, which resides in another HDF5 file.

Example:

# Example Python program that creates an external link

# to an another HDF5 file

import h5py

 

# Create a HDF5 file

file    = h5py.File("WithExternalLink.HDF5", "w");

 

# Create an external link

extLink = h5py.ExternalLink("Sample.hdf5", "/valli/pythonprogs/Sample.hdf5");

 

# Print external file properties

print("File name:%s"%extLink.filename);

print("Path:%s"%extLink.path);

 

# Close the file

file.close();

 

Output:

File name:Sample.hdf5

Path:/valli/pythonprogs/Sample.hdf5

 


Copyright 2024 © pythontic.com