Read or Write a compound datatype with h5py in python

徘徊边缘 提交于 2019-12-20 03:28:11

问题


I want to use hdf5 file among some C++, matlab, and python code. My h5 file works well in C++ and matlab, but cannot be read with h5py.

Is data types like H5T_STD_B64LE not well supported by h5py? Thanks!

In [2]: f = h5py.File('art.mips.log.h5', 'r')

In [3]: f.keys()
Out[3]: [u'mem']

In [4]: f['mem']
Out[4]: <repr(<h5py._hl.dataset.Dataset at 0x29f70d0>) failed: TypeError: No NumPy equivalent for TypeBitfieldID exists>

The hdf5 file format is as follows:

$ h5dump -H art.mips.log.h5  
HDF5 "art.mips.log.h5" { GROUP "/" {    DATASET "mem" {
      DATATYPE  H5T_COMPOUND {
         H5T_STD_B64LE "clock";
         H5T_STD_B32LE "addr";
         H5T_STD_B32LE "operation";
         H5T_ARRAY { [16] H5T_STD_B32LE } "data";
      }
      DATASPACE  SIMPLE { ( 68614468 ) / ( H5S_UNLIMITED ) }
      ATTRIBUTE "CLASS" {
         DATATYPE  H5T_STRING {
            STRSIZE 6;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
      }
      ATTRIBUTE "FIELD_0_NAME" {
         DATATYPE  H5T_STRING {
            STRSIZE 6;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
      }
      ATTRIBUTE "FIELD_1_NAME" {
         DATATYPE  H5T_STRING {
            STRSIZE 5;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
      }
      ATTRIBUTE "FIELD_2_NAME" {
         DATATYPE  H5T_STRING {
            STRSIZE 10;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
      }
      ATTRIBUTE "FIELD_3_NAME" {
         DATATYPE  H5T_STRING {
            STRSIZE 5;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
      }
      ATTRIBUTE "TITLE" {
         DATATYPE  H5T_STRING {
            STRSIZE 4;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
      }
      ATTRIBUTE "VERSION" {
         DATATYPE  H5T_STRING {
            STRSIZE 4;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
      }
   }
}
}

回答1:


h5py does not support bitfields, as stated in https://github.com/h5py/h5py/issues/109

I had a quick look at the low-level interface within h5py to see if there was a way to get the raw data out but it looks like the underlying id object needs to support a read() method.

>>> mem_id = h5py.h5o.get_info(f.id, 'mem')
>>> mem_id.read
...
AttributeError: 'h5py.h5o.ObjInfo' object has no attribute 'read'


来源:https://stackoverflow.com/questions/31303473/read-or-write-a-compound-datatype-with-h5py-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!