Die Bibliothek string
Für die Zeichenketten stehen neben den Standardfunktionen noch eine Bibliothek zur Verfügung, die passenderweise string heißt. Wie bei der Nutzung jeder Bibliothekt muss diese importiert werden.import stringFolgende Funktionen stehen zur Verfügung:
- zahl = count(str, such) oder zahl = str.count(such)
Die Funktion zählt, wie oft der Suchbegriff such in der Zeichenkette str enthalten ist und liefert den Wert zurück. - pos = find(str, such) oder pos = str.find(such)
Die Funktion liefert die Position des Suchbegriffs such in der Zeichenkette str. zurück. Ist der Suchbegriff nicht vorhanden, liefert die Funktion -1. - pos = find(str, such, abpos)
Die gleiche Funktionalität wie zuvor. Durch den dritten Parameter kann der Startpunkt der Suche angegeben werden. Ideal, wenn der Suchbegriff mehrfach in der Zeichenkette vermutet wird. - pos = rfind(str, such) oder pos = str.rfind(such)
Diese Funktion sucht rückwärts. - neustr = replace(str, such, ersatz) oder neustr = str.replace(such, ersatz)
In der Zeichenkette str wird jedes Auftreten des Suchbegriffs such durch die Zeichenkette ersatz ersetzt. Die so veränderte Zeichenkette wird als Ergebnis zurückgeliefert. - strlist = split(str) oder strlist = str.split()
Die Zeichenkette str wird bei jedem Auftreten eines Leerzeichens geteilt. Das Ergebnis ist eine Liste von Zeichenketten, die zurückgegeben wird. Sie können als weiteren Parameter eine Zeichenkette übergeben, die statt des Leerzeichens verwendet wird.
Suchen und Mustererkennung in Texten: Reguläre Ausdrücke
Die normale Suchfunktion des Moduls string ist schon ein guter Anfang. Aber manchmal soll es etwas mehr sein. Die Königsdisziplin in Sachen Suchen und Mustererkennung sind die regulären Ausdrücke. Allerdings sehen sie etwas abschreckend aus.Bevor Sie anfangen können, die regulären Ausdrücke zu verwenden, zunächst die Bedeutung der Zeichen.
Platzhalter
- Ein Punkt steht für irgendein beliebiges Zeichen. Aber es steht für genau ein Zeichen. Nicht mehr und nicht weniger.
- In eckigen Klammern werden alle Zeichen gesammelt, die ein Zeichen im Text ersetzen können.
- In den eckigen Klammer können auch Bereiche durch ein Minuszeichen beschrieben werden, wie a-z für die Zeichen von a bis z oder 0-9 für alle Ziffern.
- Führt ein Zirkumflex (Dach) die Zeichen in der Klammer an, dürfen die genannten Zeichen nicht vorkommen.
Multiplikatoren
- Ein Fragezeichen bedeutet, dass das vorangegangene Zeichen einmal oder gar nicht auftritt.
- Ein Stern bedeutet, dass das vorangegangene Zeichen nicht, einmal oder beliebig oft auftritt.
- Ein Pluszeichen bedeutet, dass das vorangegangene Zeichen mindestens einmal, aber sonst beliebig oft vorkommen darf.
- In geschweiften Klammern wird die Anzahl notiert, wie oft das vorangegangene Zeichen erscheinen muss. z{5} heißt, dass hier zzzzz stehen muss.
- Stehen in den geschweiften Klammern zwei Werte, die durch ein Komma getrennt sind, dann gibt dies an, wie oft das Zeichen minimal und maximal auftreten darf.
- Falls das Komma da ist, aber nur eine Zahl da ist, ist nur die angegebene Grenze gültig. z{5, heißt mindestens, z{,5} heißt maximal fünf mal das Zeichen z.
Zeichengruppen
- \w Alle alphanumerischen Zeichen und den Unterstrich, also [a-zA-z0-9_]
- \W Alle Zeichen, die weder alphanumerisch sind und auch der Unterstrich nicht, also [\^a-zA-z0-9_]
- \d Steht für alle Ziffern, also [0-9].
- \D Steht für alle Zeichen, die keine Ziffern sind, also [\^0-9].
- \s Steht für alle Trennzeichen wie beispielsweise Leerzeichen, sogenannte Whitespace-Zeichen, also [ \t\n\r\f\v]
- \S Steht für alle Zeichen, die nicht zu den Whitespace-Zeichen gehören, also [\^ \t\n\r\f\v]
Positionen
- \^ Das Zirkumflex (Dach) steht für den Anfang einer Zeile.
- \$ Das Dollarzeichen steht für das Ende einer Zeile.
- \A steht für den Anfang einer Zeichenkette.
- \Z steht für das Ende einer Zeichenkette.
- \b steht für den Anfang oder das Ende eines Wortes, das aus Zeichen der Klasse \w besteht und durch ein Zeichen der Klasse \s begrenzt ist.
- \B ist weder Anfang noch Ende eines Wortes
Mathematik: math
Die Bibliothek math liefert die wichtigsten Standardfunktionen, damit Python nicht hinter den billigsten Taschenrechnern zurückstehen muss.Element | Bedeutung |
pi | Die Zahl π |
e | Die Eulersche Zahl e |
z = ceil(x) | Die kleinste ganze Zahl größer oder gleich x |
z = floor(x) | Die größte ganze Zahl kleiner oder gleich x |
y = fabs(x) | Betragsfunktion (Vorzeichen auf Plus setzen) |
y = log(x) | Logarithmus von x |
y = sqrt(x) | Quadratwurzel von x |
y = sin(x) | Sinus von x |
y = tan(x) | Tangens von x |
numpy | numerische Bibliothek |
pylab | wie MatLab eine Funktion zur Ausgabe mathematischer Zeichnungen |
scipy | Integrale, Gradientenoptimierung und genetische Algorithmen |
Zufallszahlen: random
Zufallszahlen werden für die Verschlüsselung, für Simulationen und natürlich für Spiele benötigt. Die Bibliothek random liefert vor allem die Startfunktion seed() und die Funktion random(), die einen zufälligen Fließkommawert zwischen 0 und 1 liefert. Will man ganze Zahlen zwischen 1 und 6 haben, multipliziert man den Wert einfach mit 6, addiert 1 und schneidet die Nachkommastellen ab.import random random.seed() print(random.random()) # eine Zufallszahl zwischen 0 und 1 for i in range(0,3,1): # Drei Wuerfe print(int(random.random()*6+1)) # WuerfelsimulationWird der Funktion seed() ein Parameter übergeben, werden die Zufallszahlen immer die gleiche Sequenz aufweisen.
Tatsächlich können Sie allerdings eine Würfelsimulation durch die Funktion randint einfacher haben.
print(random.randint(1, 6))Der erste Parameter legt die Untergrenze und der zweite Parameter den höchsten Wert an.
Datumsbibliothek
Das Modul datetime
Das Modul datetime liefert einen einfachen Zugriff auf Datums- und Zeitfunktionen.Ein Datum kann über den Aufruf von datetime.date() erzeugt werden. Als Parameter können Sie Jahr, Monat und Tag des Datums übergeben.
import datetime tollertag = datetime.date(1991,5,31) print(tollertag)Die Funktion today() liefert eine Variable mit dem heutigen Datum zurück. Im Beispiel wird gezeigt, wie Sie den Inhalt in der deutschen Form darstellen. Dazu können Sie auf die Attribute day, month und year zugreifen. Über die format-Funktion (siehe Abschnitt~format) können Sie die Ausrichtung leicht gestalten.
import datetime heute = datetime.date.today() print("{}.{}.{}".format(heute.day,heute.month,heute.year))Analog verhält es sich mit dem Zugriff auf die aktuelle Zeit. Dazu rufen Sie die Funktion datetime.datetime.now() auf. Über die Attribute hour, minute, second und microsecond können Sie die Bestandteile der Uhrzeit auslesen.
import datetime now = datetime.datetime.now() print("{}:{}:{}.{}".format(now.hour,now.minute,now.second,now.microsecond))Der Wochentag eines Datums wird über die Funktion weekday() ermittelt. Die Funktion liefert eine 0 für den Sonntag und eine 6 für den Samstag.
import datetime wochentag = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"] heute = datetime.date.today() print(wochentag[heute.weekday()])Wenn Sie zwei Tagesdaten mit einem einfachen Minuszeichen voneinander abziehen, erhalten Sie eine Variable vom Typ timedelta. Sie können andererseits eine Variable vom Typ timedelta auf ein Datum mit einem Pluszeichen aufaddieren und erhalten wieder ein Datum. Wenn Sie einfach 14 Tage aufaddieren wollen, verwenden Sie den Konstruktor von timedelta und übergeben Sie diesem die Tage. Das Attribut days liefert die Anzahl der Tage eines Objekts vom Typ timedelta. Sie sehen den Umgang mit diesen Funktionen an dem folgenden Beispiel.
import datetime tage = datetime.date.today() - datetime.date(2014,10,12) print(type(tage)) # meldet den Typ datetime.timedelta zahltag = datetime.date.today()+datetime.timedelta(14) diff = zahltag - heute print(diff.days)
Umwandlung in Zeichenketten
Manchmal muss es eine Zeichenkette sein. Beispielsweise werden gern Dateinamen aus dem aktuellen Datum gebildet.
import datetime heute = datetime.datetime.today() format = "%Y-%m-%d-%H%M%S" strheute = "backup-".heute.strftime(format)Das Ergebnis wäre dann beispielsweise: 2020-07-21-083341
Der String kann wieder zurück in ein Datum verwandelt werden:
readheute = datetime.datetime.strptime(strheute, "%Y-%m-%d-%H%M%S") print(readheute.day)Das Ergebnis ist nun 21, also der Tag des Datums.
Die Prozent-Tags bedeuten:
Tag | Bedeutung |
---|---|
%b | Monatskürzel (Feb) |
%B | Monatsname |
%m | Monatszahl (zweistellig) |
%d | Monatstag (zweistellig) |
%H | Stunde (0-23) |
%M | Minute (0-59) |
%S | Sekunde (0-59) |
%Y | Jahreszahl (vierstellig) |
Das klassische Modul time
Viele Programmierer kennen die Struktur time und die passenden Funktionen, die bereits bei den alten UNIX-Maschinen eingeführt wurde und seither als POSIX-Standard große Verbreitung fand. Viele andere Bibliotheken orientieren sich daran. Auch Python bietet time an.UNIX zählt die Zeit in Sekunden seit dem 1.1.1970, also etwa dem Zeitpunkt, seit es UNIX gibt. Da es sich um einfachen Zahlenwert handelt, ist der Umgang damit relativ einfach. Lediglich die Umrechnung in die unter Menschen üblichen Kalenderdaten und Uhrzeiten ist etwas mühselig. Das Beispiel ermittelt den jeweils aktuellen UNIX-Zeitstempel:
import time print(time.time())Die meisten Menschen werden entnervt reagieren, wenn sie diese Zahl als Antwort auf die Frage nach der aktuellen Uhrzeit bekommen. Dabei ist das völlig unverständlich. Sie müssten doch nur den Zeitstempel durch die Funktion localtime() in eine time_struct überführen.
import time loctime = time.localtime(time.time()) print(loctime.tm_hour, loctime.tm_min)
Attribut | Bedeutung |
---|---|
tm_year | Jahr |
tm_mon | Monat (1-12) |
tm_mday | Tag des Monats (1-31) |
tm_hour | Stunde (0-23) |
tm_min | Minute (0-59) |
tm_sec | Sekunde (0-59) |
tm_wday | Wochentag (0-6) 0 ist Sonntag |
tm_yday | Tag im Jahr (0-366) |
tm_isdst | Sommerzeit (1), Winterzeit (0), unbekannt (-1) |
Schlafenszeit
Nicht ganz passend findet sich auch die Funktion sleep() in dem Modul time, das sich ansonsten nur mit der Ermittlung von Datum und Uhrzeit befasst. Die Funktion sleep() stoppt den aktuellen Programmablauf um die Zahl von Sekunden, die als Parameter übergeben wird. Da auch Fließkommazahlen erlaubt sind, können Sie den Ablauf auch für eine zehntel Sekunde unterbrechen.import time time.sleep(5) # unterbricht den Ablauf fuer 5 Sekunden