visit
または、ファイルvisititems
の全体的な構造をすばやく確認できます。h5py
fs['struArray'].visititems(lambda n,o:print(n, o))
Octave によって生成されたファイルでこれを実行すると、次のsave -hdf5
ようになります。
type <HDF5 dataset "type": shape (), type "|S7">
value <HDF5 group "/struArray/value" (3 members)>
value/data <HDF5 group "/struArray/value/data" (2 members)>
value/data/type <HDF5 dataset "type": shape (), type "|S5">
value/data/value <HDF5 group "/struArray/value/data/value" (4 members)>
value/data/value/_0 <HDF5 group "/struArray/value/data/value/_0" (2 members)>
value/data/value/_0/type <HDF5 dataset "type": shape (), type "|S7">
value/data/value/_0/value <HDF5 dataset "value": shape (10, 1), type "<f8">
value/data/value/_1 <HDF5 group "/struArray/value/data/value/_1" (2 members)>
...
value/data/value/dims <HDF5 dataset "dims": shape (2,), type "<i4">
value/id <HDF5 group "/struArray/value/id" (2 members)>
value/id/type <HDF5 dataset "type": shape (), type "|S5">
value/id/value <HDF5 group "/struArray/value/id/value" (4 members)>
value/id/value/_0 <HDF5 group "/struArray/value/id/value/_0" (2 members)>
...
value/id/value/_2/value <HDF5 dataset "value": shape (), type "<f8">
value/id/value/dims <HDF5 dataset "dims": shape (2,), type "<i4">
value/name <HDF5 group "/struArray/value/name" (2 members)>
...
value/name/value/dims <HDF5 dataset "dims": shape (2,), type "<i4">
これは、MATLAB 7.3 が生成するものと同じではないかもしれませんが、構造の複雑さのアイデアを提供します。
より洗練されたコールバックは値を表示でき、Python オブジェクト (辞書、リストなど) を再作成するための開始点になる可能性があります。
def callback(name, obj):
if name.endswith('type'):
print('type:', obj.value)
elif name.endswith('value'):
if type(obj).__name__=='Dataset':
print(obj.value.T) # http://stackoverflow.com/questions/21624653
elif name.endswith('dims'):
print('dims:', obj.value)
else:
print('name:', name)
fs.visititems(callback)
生成:
name: struArray
type: b'struct'
name: struArray/value/data
type: b'cell'
name: struArray/value/data/value/_0
type: b'matrix'
[[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]]
name: struArray/value/data/value/_1
type: b'matrix'
[[ 3. 4. 5. 6. 7. 8. 9.]]
name: struArray/value/data/value/_2
type: b'scalar'
0.0
dims: [3 1]
name: struArray/value/id
type: b'cell'
name: struArray/value/id/value/_0
type: b'scalar'
1.0
...
dims: [3 1]
name: struArray/value/name
type: b'cell'
name: struArray/value/name/value/_0
type: b'sq_string'
[[111 110 101]]
...
dims: [3 1]