Speichern von Strings in HDF5 Dateien mit h5py

Im folgenden Beitrag zeige ich ein einfaches Beispiel wie das Speichern von Strings mittels h5py als Dataset in HDF5 Dateien funktioniert.

HDF5 Daten als wissenschaftliches Speichermedium

In einem meiner R&D Projekte in der Medizintechnik führen wir Schnelltests (z.B. Blutzucker oder COVID Antigen Tests) auf sogenannten Point-of-Care Geräten durch. Dabei sind die Geräte, die sich noch in der Entwicklung befinden, so eingestellt, dass sie ein DEBUG Log erzeugen. Dieses Log ist natürlich von essentieller Bedeutung für die daran beteiligten Wissenschaftler und muss für tausende von durchgeführten Tests verfügbar und mit wissenschaftlicher Analysesoftware auszuwerten sein. Zusätzlich entstehen Messdaten der verschiedenen Sensoren und ausserdem gibt es für jeden Test einen Satz von Metadaten. Ein ideales Werkzeug sind dafür Dateien im HDF5 Format. Für jeden Test ensteht also eine HDF5 Datei, die im R&D Fall auch das DEBUG Log enthält.

„Speichern von Strings in HDF5 Dateien mit h5py“ weiterlesen

Python kwargs – Python Funktions Parameter

Python kwargs – keyword arguments

Python Funktionen enthalten in der Regel Parameter. Meistens werden neben den normalen Parametern auch Parameter, die einen Standardwert bzw default bereits in der Funktionsdefinition enthalten, benutzt.

Positionsgebunden oder über Schlüsselwort

Ein einfaches Beispiel:

def welcome(first_name, last_name="Last Name"):
    print(first_name, last_name)

Die Funktion welcome besitzt zwei Parameter: first_name und last_name

Der zweite Parameter last_name hat per Funktionsdefinition bereits einen Standardwert zugewiesen bekommen. Wird nun beim Funktionsaufruf das Argument für last_name weggelassen, so wird dem Parameter automatisch der Standartwert zugewiesen. Andernfalls benutzt der Interpreter das entsprechende Argument.

>>> welcome("Christian") 
Christian Last Name 
>>> welcome("Christian", last_name="Scholz") 
Christian Scholz
„Python kwargs – Python Funktions Parameter“ weiterlesen

Python *args **kwargs – Funktionen mit variabler Parameter Anzahl

Parameter in Python

Meistens verwendet man in Funktionen und Methoden von Python eine ganz konkrete Anzahl von Parametern. Ich halte das für die verständlichste und sauberste Art und Weise eine Funktion zu beschreiben. Jemand der diese Funktionen benutzen möchte, weiß somit, wie diese konkret anzusprechen sind und im Idealfall, welche Typen bzw Objekte an welcher Position zu übergeben sind oder welche Parameter optional (default parameter values, bzw Standardparameter oder voreingestellter Parameter) übergeben werden können.

Hier findet man die genaue Definition für Parameter bzw Argumente: https://docs.python.org/3/glossary.html#term-argument

Ein einfaches Beispiel mit festen positionsbezogenen Parametern (positional arguments) und voreingestellten Parametern (keyword arguments):

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
 
def main(a_string, an_int, a_bool=True, a_float=1.0):
    """
    this is the main function, it combines all given parameters and prints its values
 
    :param a_string: a string parameter (as first argument)
    :param an_int: an integer parameter (as second argument)
    :param a_bool: an optional boolean parameter (as keyword argument)
    :param a_float: an optional float parameter (as keyword argument)
    """
    print(a_string, an_int, a_bool, a_float)
 
 
if __name__ == "__main__":
    main("only arguments", 1337)
    main("arguments and keywords", 1337, a_bool=False, a_float=1.23)
    main("arguments and keywords not sorted", 1337, a_float=1.23, a_bool=False)
    main("arguments and some keywords", 1337, a_float=2.34)
    main("argument and one argument keyworded", an_int=1337, a_bool=False)
    main(1337, "argument type does not matter", "T", False)
    main("this will fail")

Führt man dieses einfache Script aus, so ergibt sich folgende Ausgabe:

$ ./simple.py 
('only arguments', 1337, True, 1.0)
('arguments and keywords', 1337, False, 1.23)
('arguments and keywords not sorted', 1337, False, 1.23)
('arguments and some keywords', 1337, True, 2.34)
('argument and one argument keyworded', 1337, False, 1.0)
(1337, 'argument type does not matter', 'T', False)
Traceback (most recent call last):
  File "./simple.py", line 24, in <module>
    main("this will fail")
TypeError: main() takes at least 2 arguments (1 given)
„Python *args **kwargs – Funktionen mit variabler Parameter Anzahl“ weiterlesen

Kommentare in Python richtig verwenden

Kommentare richtig einsetzen

Kommentare sind in jeder Programmiersprache ein wichtiger Bestandteil. Sie erfüllen verschiedene Aufgaben, je nachdem wo sie eingesetzt werden. Es gibt Kommentare um Funktionen, Methoden oder Klassen zu beschreiben, aber auch Kommentare innerhalb eines Code-Blocks, die dazu dienen eine Stelle im Code näher zu erläutern.

In Python kann man auf verschiedene Weise einen Kommentar schreiben. Am einfachsten geht das mit dem # Zeichen gefolgt vom eigentlichen Kommentar, der sich in der gleichen Zeile anschließt.

# this is a simple comment, in only one line

Möchte man über mehrere Zeilen kommentieren, so kann man entweder in jeder Zeile ein # Zeichen setzen:

# comment starting in the first line 
# continues in the second 
# and maybe third?

oder aber man benutzt einen multiline-string, welcher mit drei Anführungszeichen eingeleitet und ebenso beendet wird:

""" this is a multi line comment 
to describe some more details """ 

Wie bereits angedeutet, werden die möglichen Kommentar Typen an unterschiedlichen Stellen im Code immer wieder verwendet.

Hier wird ein Line-Kommentar benutzt, um zu erklären, weshalb der nachfolgende Codeblock entsprechend aufgebaut ist:

# Make sure os.environ exists, at least
try:
    environ
except NameError:
    environ = {}

Es ist auch möglich einen Kommentar hinter einem Stück Code einzufügen, so kann man z.B. in einer Zeile den restlichen Code „ignorieren“ ohne ihn komplett entfernen zu müssen. Wir addieren die Variable b nur einmal, da der dritte Summand auskommentiert ist.

def calc(a, b):
    return a + b #+ b

Kommentare über mehrere Zeilen werden meist für die Dokumentation benutzt. Documentation-Strings oder kurz „docstrings“ schließen sich der Funktions- bzw Methodendefinition an.

def removedirs(name):
    """removedirs(name)

    Super-rmdir; remove a leaf directory and all empty intermediate
    ones.  Works like rmdir except that, if the leaf directory is
    successfully removed, directories corresponding to rightmost path
    segments will be pruned away until either the whole path is
    consumed or an error occurs.  Errors during this latter phase are
    ignored -- they generally mean that a directory was not empty.

    """
    rmdir(name)
    head, tail = path.split(name)
    if not tail:
        head, tail = path.split(head)
    while head and tail:
        try:
            rmdir(head)
        except OSError:
            break
        head, tail = path.split(head)

Hier findet man die PEP8 Definitionen zu Kommentaren.

„Kommentare in Python richtig verwenden“ weiterlesen

einfach python

Python möglichst einfach erklärt

Dieses wordpress Blog ist mein neuestes Projekt und befasst sich mit der Programmiersprache Python. Mit kleinen kurzen Beiträgen möchte ich die Sprache Neulingen in der Programmierung näher bringen, aber auch mal alten Programmierhasen oder Quereinsteigern ein paar A-ha Effekte entlocken.

Ausschließlich in deutscher Sprache

Das Blog ist bewusst in Deutsch gehalten. Natürlich ist die Sprache der Wahl in der Programmierung Englisch, aber ich denke, dass es gerade für Einsteiger beim Lesen von How-To’s und Tutorials in englischer Sprache oft Verständnisproblem gibt. Mir ging und geht es zum Teil manchmal immer noch so. Außerdem möchte ich das Netz nicht noch zusätzlich mit grammatikalisch nicht ganz flüssigem Englisch füllen, das haben andere schon zu oft erledigt.

Zu meinen Artikeln werde ich zusätzlich noch weiterführende Links angeben, in denen man sich dann noch tiefgreifender mit dem ein oder anderen Thema beschäftigen kann.

Ich hoffe, dass dieses Blog und die kommenden Artikel dem ein oder anderen weiterhelfen und freue mich immer über Kommentare, positive wie auch kritische. Zu lernen haben wir alle immer etwas…

Viel Spaß beim Lesen und Stöbern,

Christian