Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

where item stands for file, group of dataset.

Check if the HDF5 item is "File", "Group", or "

...

Dataset"

Code Block
isFile    = isinstance(item, h5py.File)
isGroup   = isinstance(item, h5py.Group)
isDataset = isinstance(item, h5py.Dataset)

In this example the standard Python method isinstance(...)}} returns {{True or False in each case, respectively.

...

  • Get item attributes for File or Group (if attributes available)
    In this example the item might be a group or file
    Code Block
    item.attrs          # for example: <Attributes of HDF5 object at 230141696>
    item.attrs.keys()   # for example: ['start.seconds', 'start.nanoseconds']
    item.attrs.values() # for example: [1297608424L, 627075857L]
    len(item.attrs)
    
    # 

For

...

example,

...

one

...

of

...

the

...

file

...

attributes

...

is

...

a

...

run

...

number

...

,

Code Block

run_number = file.attrs['runNumber']
  • Get the list of daughters in the group
    Code Block
    list_of_item_names = group.items()
    print list_of_item_names
    
    or convert the group in dictinary and iterate over their key and values,
    Code Block
    for key,val in dict(group).iteritems():
        print key, val
    

...

  • from the time data record
    Code Block
    time_dataset = file['/Configure:0000/Run:0000/CalibCycle:0002/Acqiris::DataDescV1/XppLas.0:Acqiris.0/time']
    
    index = 0                   # this is an index in the dataset
    time = time_dataset[index]  # get the time tuple consisting of seconds and nanoseconds
    time_sec  = time[0]
    time_nsec = time[1]
    

Code examples

Example 1

...

: basic operations

Code Block
#!/usr/bin/env python

import h5py
import numpy as np

eventNumber = 5

file    = h5py.File('/reg/d/psdm/XPP/xppcom10/hdf5/xppcom10-r0546.h5', 'r')
dataset = file['/Configure:0000/Run:0000/CalibCycle:0000/Camera::FrameV1/XppSb4Pim.1:Tm6740.1/image']
arr1ev  = dataset[eventNumber]
file.close()

print 'arr1ev.shape =', arr1ev.shape
print 'arr1ev =\n',     arr1ev

Example 2

...

: advanced operations

...

Extract and print the time variables:

Code Block
#!/usr/bin/env python

import h5py
import time

#-----------------------------------------------------

def print_time(t_sec, t_nsec):
    """Converts seconds in human-readable time and prints formatted time"""

    tloc = time.localtime(t_sec) # converts sec to the tuple struct_time in local
    print 'Input time :',t_sec,'sec,',  t_nsec,'nsec, '
    print 'Local time :', time.strftime('%Y-%m-%d %H:%M:%S',tloc)

#-----------------------------------------------------

file_name = '/reg/d/psdm/xpp/xpp22510/hdf5/xpp22510-r0100.h5'
file = h5py.File(file_name, 'r') # open read-only

print "EXAMPLE: Get time from the group attributes:"

group = file["/Configure:0000"]
t_sec  = group.attrs.values()[0]
t_nsec = group.attrs.values()[1]
print_time(t_sec, t_nsec)


print "EXAMPLE: Get time from the data record 'time':"

dataset = file['/Configure:0000/Run:0000/CalibCycle:0002/Acqiris::DataDescV1/XppLas.0:Acqiris.0/time']
index = 0
time = dataset[ind]
t_sec  = time[0]
t_nsec = time[1]
print_time(t_sec, t_nsec)

f.close()

#----------------------------------------------------

...

Print entire file/group structure using recursive method

Code Block
#!/usr/bin/env python
import h5py

def print_group(g,offset='    '):
    """Prints the input file/group/dataset (g) name and begin iterations on its content"""
    print "Structure of the",
    if   isinstance(g,h5py.File):    print "'File'",
    elif isinstance(g,h5py.Group):   print "'Group' from file",
    elif isinstance(g,h5py.Dataset): print "'Dataset' from file",
    print g.file,"\n",g.name
    if   isinstance(g,h5py.Dataset): print offset, "(Dateset)   len =", g.shape #, subg.dtype
    else:                            print_group_content(g,offset)

def print_group_content(g,offset='    '):
    """Prints content of the file/group/dataset iteratively, starting from the sub-groups of g"""
    for key,val in dict(g).iteritems():
        subg = val
        print offset, key, #,"   ", subg.name #, val, subg.len(), type(subg),
        if   isinstance(subg, h5py.Dataset):
            print " (Dateset)   len =", subg.shape #, subg.dtype
        elif isinstance(subg, h5py.Group):
            print " (Group)   len =",len(subg)
            print_group_content(subg,offset + '    ')

def print_hdf5_file_structure(file_name):
    """Prints the HDF5 file structure"""
    file = h5py.File(file_name, 'r') # open read-only
    print_group(file)
    file.close()
    print '=== EOF ==='

if __name__ == "__main__" :
    print_hdf5_file_structure('/reg/d/psdm/xpp/xpp22510/hdf5/xpp22510-r0100.h5')