h5 files importieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maincontent2
User
Beiträge: 3
Registriert: Donnerstag 24. März 2022, 16:34

Hallo zusammen

Ich habe ein h5 File die
- eine Datenmatirx (die kann ich als list importieren, die Dimension stimmt aber nicht exakt)
- eine Versionsnummer (die kann ich nicht als str importieren)
- ein Text (den kann ich nicht als str importieren)

beinhaltet. Die Datensätze sind standartisiert und können nicht abgeändert werden. Sie wurde bereits in Matlab erfolgreich eingelesen. Jetzt geht es darum, das Programm in Python umzuschreiben. (Python ist gratis, Matlab nicht)

Beispiel:
Datenmatrix:
5+7i
7+5i
15+1i
...
Versionsnummer:
3.13.0

Text :
'[[{"error": false, "saturation": false, "quality_warning": false, "proximity_power": 0}], [{"error": false, "saturation": false, "quality_warning": false, "proximity_power": 0}], ...]

Code: Alles auswählen

import h5py    
import numpy as np

filename=     #pfad zu Datei

with h5py.File(filename, "r") as h5read:
        # List all groups
        print("Keys: %s" % h5read.keys())
        a_group_key = list(h5read.keys())              #Names of the groups in HDF5 file.

        # Get the data
        dataRaw = list(h5read[a_group_key[0]])			#Datenmatrix
        rssVersion = str(h5read[a_group_key[6]])		#Versionsnummer
        dataInfo = str(h5read[a_group_key[1]])			#Text
        


Wenn ich nun meinen Code ausführe, dann wird die rssVersion nicht eingelesen als string, Python überspringt die Linie und plottet:

<HDF5 dataset "rssVersion ": shape (), type "|O">

Könnt Ihr mir dabei helfen?

Besten Dank für eure Hilfe

Einen schönen Abend
Sirius3
User
Beiträge: 17761
Registriert: Sonntag 21. Oktober 2012, 17:20

Variablennamen schreibt man komplett klein. `h5read` passt irgendwie nicht zu dem Inhalt einer H5-Datei, `h5data` wäre ein genauso generischer Name, aber etwas besser. Eigentlich sollte der Variablennamen etwas über den Inhalt aussagen.
Man arbeitet eigentlich direkt mit den Daten und wandelt die nicht in Python-Listen um. Je nachdem wie groß Deine Datenmatrix ist, kann das ineffizient werden.
Man greift direkt über den Namen auf die einzelnen Felder zu, und vertraut nicht darauf, dass der siebte Key hoffentlich die Versionsnummer enthalten wird. Das was Du da hast, ist ein Dataset mit einem einzelnen Wert vom Typ `object`. Um an die Daten ranzukommen, muß man () als Index verwenden:

Code: Alles auswählen

rss_version = h5data["rssVersion"][()]
Der "Text" sieht komisch aus. Wurde da wirklich die Stringrepräsentation einer Python-Liste von Wörterbüchern gespeicher? Oder kommt das durch deinen `str`-Aufruf?
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Wie "Sirius3" schon schrieb...das "h5read" passt irgendwie nicht so richtig.
Numpy braucht man für HDF5 eigentlich auch nicht.
Ein kleines Codesnippet, was eigentlich ausreicht um ein HDF5-File einzulesen
.

Code: Alles auswählen

import h5py

filename='file.h5'
f=h5py.File(filename, 'r')
print(str(f.keys()))

dataset= list(f.keys())[0]
print (dataset)
daten=list(f[dataset])
print (daten)
Du brauchst nur die Gruppe in deinem Dataset zu indexieren....da sollte reichen
Antworten