Wissensdatenbank von GCSoft

>> Wissensdatenbank / Python 3

Sequenzielle Datentypen - str, bytes, bytearray

Die Zeichen, die eine Instanz des Datentyps str speichern kann, sind Buchstaben, Satz- und Leerzeichen oder auch Umlaute.
Im Gegensatz dazu sind die Datentypen bytes und bytearray für di Speicherung von Binärdaten vorgesehen.

Eine str-Instanz kann mit einfachen oder doppelten Hochkommata erzeugt werden.
Mehrzeilige Strings können unter drei doppelte Hochkommata ("""text""") angegeben werden.
Stehen zwei String-Literate unmittelbar oder durch Leerzeichen getrennt hintereinander, werden sie zu einem String verbunden.

Bei der Erzeugung einer bytes-Instanz ist dem String-Literal ein kleines b voranzustellen:
string = b"Ich bin bytes!"

Um eine neue Instanz des Typs bytearray zu erzeugen, dient die gleichnamige Built-in Function bytearray:
string1 = b"Hallo Welt"
string2 = bytearray(string1)
Übergibt man der Funktion bytearray eine ganze Zahl k als Parameter, wird ein neues bytearray der Länge k erzeugt,
wobei jedes der Bytes den Wert Null zugewiesen bekommt.

Steuerzeichen

Steuerzeichen steuern den Textfluss. Dazu zählen unter anderem der Zeilenvorschub, der Tabulator oder der Rückschritt (backspace).
Steuerzeichen werden als spezielle Zeichenfolgen, den Escape-Sequenzen angegeben, z.B. \n.

Es gibt in Python folgende Escape-Sequenzen:

Escape-Sequenz Bedeutung
\a Bell (BEL) erzeugt einen Signalton.
\b Backspace (BS) setzt die Ausgabeposition um ein Zeichen zurück.
\f Formfeed (FF) erzeugt einen Seitenvorschub.
\n Linefeed (LF) setzt die Ausgabeposition in die nächste Zeile.
\r Carriage Return (CR) setzt die Ausgabeposition an den Anfang der nächsten Zeile.
\t Horizontal Tab (TAB) hat die gleiche Bedeutung wie die Tabulatortaste.
\v Vertikaler Tabulator (VT); dient zur vertikalen Einrückung.
\" Doppeltes Hochkomma.
\' Einfaches Hochkomma.
\\ Backslash, der wirklich als solcher in dem String erscheinen soll.
In Python gibt es die Präfixe r oder R, die einem String-Literal vorangestellt werden können. Diese Präfixe markieren das Literal
als einen sogenannten Raw-String (roh), was dazu führt, dass alle Backslashs eins zu eins in den Resultat-String übernommen werden.
r"Zwei Backslashs (\\)" => Zwei Backslashs (\\).
Durch das Präfix rb bzw. br können Raw-Strings vom Typ bytes erzeugt werden.

Whitespaces

String-Literal Name
" " Leerzeichen
\n Zeilenvorschub
\v Vertikaler Tabulator
\t Horizontaler Tabulator
\f Formfeed
\r Carriage Return

String-Methoden

String-Instanzen verfügen zusätzlich zu den Methoden für sequenzielle Datentypen über weitere Methoden,
die den Umgang mit Zeichenketten vereinfachen.

Trennen von Strings

Methode Beschreibung
s.split([sep, maxsplit]) Teilt s bei Vorkommen von sep. Die Suche beginnt am String-Anfang.
s.rsplit([sep, maxsplit]) Teilt s bei Vorkommen von sep. Die Suche beginnt am String-Ende.
s.splitlines([keepends]) Teilt s bei Vorkommen von Zeilenvorschüben.
s.partition(sep) Teilt s bei Vorkommen von sep. Die Suche beginnt am Anfang des Strings.
Di resultierende Liste enthält neben den Spaltprodukten auch das Trennzeichen sep.
s.rpartition(sep) Teilt s bei Vorkommen von sep. Die Suche beginnt am String-Ende.
Di resultierende Liste enthält neben den Spaltprodukten auch das Trennzeichen sep.

Suchen von Teil-Strings

Methode Beschreibung
s.find(sub, [start, end]) Sucht den String sub im String s. Die Suche beginnt am String-Anfang.
s.rfind(sub, [start, end]) Sucht den String sub im String s. Die Suche beginnt am String-Ende.
s.index(sub, [start, end]) Sucht den String sub im String s. Die Suche beginnt am String-Anfang.
Ist sub nicht in s vorhanden, wird eine Exception geworfen.
s.rindex(sub, [start, end]) Sucht den String sub im String s. Die Suche beginnt am String-Ende.
Ist sub nicht in s vorhanden, wird eine Exception geworfen.
s.count(sub, [start, end]) Zählt die Vorkommen von sub in s.

Ersetzen von Teil-Strings

Methode Beschreibung
s.replace(old, new, [count]) Ersetzt die Vorkommen von old im String s durch new.
s.lower() Ersetzt alle Großbuchstaben in s durch entsprechende Kleinbuchstaben.
s.upper() Ersetzt alle Kleinbuchstaben in s durch entsprechende Großbuchstaben.
s.swapcase() Ersetzt alle Großbuchstaben in s durch entsprechende Kleinbuchstaben und umgekehrt
alle Kleinbuchstaben durch entsprechende Großbuchstaben.
s.capitalize() Ersetzt den ersten Bucstaben vons durch den entsprechenden Großbuchstaben und alle
alle folgenden Großbuchstaben durch entsprechende Kleinbuchstaben.
s.casefold() Arbeitet ähnlich wie s.lower(), wobei zusätzlich Sonderzeichen ersetzt werden. So liefert etwa
"Straße".casefold() das Ergebnis "strasse" zurück.
Die Rückgabewerte von s.casefold() sind für Vergleiche zwischen Strings gedacht,
bei denen es nicht auf Groß- und Kleinschreibung ankommt.
s.title() Ändert die Groß-/Kleinschreibung von s so, dass alle Wörter bis auf den ersten
Buchstaben kleingeschrieben werden.
s.expandtabs([tabsize]) Rückt s ein, indem Tabs ("\t") durch Leerzeichen ersetzt werden.

Entfernen bestimmter Zeichen am Anfang oder am Ende von Strings

Methode Beschreibung
s.strip([chars]) Entfernt bestimmte Zeichen am Anfang und am Ende des Strings s.
s.lstrip([chars]) Entfernt bestimmte Zeichen am Anfang des Strings s.
s.rstrip([chars]) Entfernt bestimmte Zeichen am Ende des Strings s.

Ausrichtung von Strings

Die folgenden Methoden erzeugen einen String mit einer vorgegebenen Länge und richten den
Ursprungsstring darin auf eine bestimmte Weise aus.

Methode Beschreibung
s.center(width, [fillchar]) Zentriert s im resultierenden String.
s.ljust(width, [fillchar]) Richtet s im resultierenden String linksbündig aus.
s.rjust(width, [fillchar]) Richtet s im resultierenden String rechtsbündig aus.
s.zfill(width) Richtet s rechtsbündig aus, indem links mit Nullen aufgefüll wird.

String-Tests

Die folgenden Methoden geben einen Wahrheitswert zurück.

Methode Beschreibung
s.isalnum() True, wenn alle Zeichen in s Buchstaben oder Ziffern sind.
s.isalpha() True, wenn alle Zeichen in s Buchstaben sind.
s.isdigit() True, wenn alle Zeichen in s Ziffern sind.
s.islower() True, wenn alle Buchstaben in s Kleinbuchstaben sind.
s.isupper() True, wenn alle Buchstaben in s Großbuchstaben sind.
s.isspace() True, wenn alle Zeichen in s Whitespaces sind.
s.istitle() True, wenn alle Wörter in s großgeschrieben sind.
s.startswith(prefix, [sart, end]) True, wenn s mit dem String prefix beginnt.
s.endswith(prefix, [sart, end]) True, wenn s mit dem String prefix endet.

Verkettung von Elementen in sequenziellen Datentypen

Mit join kann eine Liste von Strings mit einem Trennzeichen verkettet werden.

Methode Beschreibung
s.join(seq) Verkettet die Elemente der Sequenz seq zu einem neuen String, wobei s als Trennzeichen dient.

Wird für seq ein String übergeben, ist das Ergebnis die Verkettung aller Buchstaben, jeweils durch s getrennt.

Formatierung von Strings

In Python gibt es zur Formatierung von Strings die Methode format. Mithilfe von format können in einem String
Platzhalter durch bestimmte Werte ersetzt werden.
Beispiel: "Es ist {0}:{1} Uhr".format(13, 37) => 'Es ist 13:37 Uhr'

Wenn Zahlen als Platzhalter verwendet werden, müssen sie fortlaufend durchnummeriert sein, bei 0 beginnend.
Es ist auch möglich, diese Nummerierung implizit vornehmen zu lassen, indem nichts zwischen die
geschweiften Klammern geschrieben wird.
Beispiel: "Es ist {}:{} Uhr".format(13, 37) => 'Es ist 13:37 Uhr'

Werden Namen als Platzhalter verwendet, müssen die Werte als Schlüsselwortparameter übergeben werden:
Beispiel: "Es ist {stunde}:{minute} Uhr".format(stunde=13, minute=37) => 'Es ist 13:37 Uhr'

Man kann auch nummerierte mit symbolischen Platzhaltern mischen:
Beispiel: "Es ist {stunde}:{0} Uhr".format(37, stunde=13) => 'Es ist 13:37 Uhr'

Soll eine geschweifte Klammer als Zeichen interpretiert werden, müssen zwei Klammern hintereinander gesetzt werden.

Anstatt der Methode format kann einem String auch ein f vorangestellt werden.

Zugriff auf Attribute und Elemente

Soll in dem Format-String auf Attribute des übergebenen Wertes zugegriffen werden, wird das gewünschte Attribut,
durch einen Punkt getrennt, hinter den Namen des Platzhalters geschrieben.
Beispiel: c = 15 + 20j
"Realteil: {0.real}".format(c)

Mit dem []-Operator können gezielt Elemente einer Liste ausgegeben werden.

Formatierung der Ausgabe

Zur Formatierung der Ersetzung von Platzhaltern können Formatangaben (format specifier) durch einen
Doppelpunkt getrennt vom Namen des Platzhalters angegeben werden.
Beispiel: "Betrag: {:.2f} Euro".format(13.37690) => 'Betrag: 13.38 Euro'

Prinzipieller Aufbau einer Formatangabe:
[[fill]align][sign][#][0][minimumwidth][,][.precision][type]

Minimale Breite festlegen - minimumwidth

Wird als Formatangabe eine einfache Ganzzahl verwendet, legt sie die minimale Breite fest.

Ausrichtung bestimmen - align

Beispiel: "Endpreis: {sum:>5}"

Zeichen Bedeutung
< Der Wert wird linksbündig in den reservierten Platz eingefügt. Dies ist das
Standardverhalten, sofern keine Ausrichtung angegeben ist.
> Der Wert wird rechtsbündig in den reservierten Platz eingefügt.
= Sorgt dafür, dass bei numerischen Werten das Vorzeichen immer am Anfang
des eingefügten Wertes seht und erst danach eine Ausrichtung nach rechts
erfolgt.
Diese Angabe ist ausschließlich bei numerischen Werten sinnvoll und
führt bei anderen Datentypen zu einem ValueError.
^ Der Wert wird zentriert in den reservierten Platz eingefügt.

Füllzeichen - fill

Vor der Ausrichtungsangabe kann das Zeichen festgelegt werden, mit dem die überschüssigen Zeichen
beim Ausrichten aufgefüllt werden (Default = Leerzeichen).

Behandlung von Vorzeichen - sign
Zeichen Bedeutung
+ Sowohl bei positiven als auch bei negativen Zahlenwerten wird ein Vorzeichen angegeben.
- Nur bei negativen Zahlenwerten wird das Vorzeichen angegeben. (Defaultwert)
(Leerzeichen) Mit dem Leerzeichen wird daür gesorgt, dass bei positiven Zahlenwerten anstelle eines
Vorzeichens eine Leerstelle eingefügt wird. Negative Zahlen erhalten bei dieser
Einstellung ein Minus als Vorzeichen.
Zahlendarstellungstypen - type

Ausgabetypen für Ganzzahlen:

Zeichen Bedeutung
b Die Zahl wird in Binärdarstellung ausgegeben.
c Die Zahl wird als Unicode-Zeichen interpretiert.
d Die Zahl wird in Dezimaldarstellung ausgegeben. (Defaultwert)
o Die Zahl wird in Oktaldarstellung ausgegeben.
x Die Zahl wird in Hexadezimaldarstellung ausgegeben, wobei für die Ziffern
a bis f Kleinbuchstaben verwendet werden.
X Die Zahl wird in Hexadezimaldarstellung ausgegeben, wobei für die Ziffern
A bis F Großbuchstaben verwendet werden.
n Die Zahl wird in Dezimaldarstellung ausgegeben, aber es wird versucht, das für
die Region übliche Zeichen zur Trennung von Zahlen zu verwenden.

Es gibt noch einen alternativen Modus für die Ausgabe von Ganzzahlen, der aktiviert wird, indem eine
Raute # zwischen die minimale Breite und das Vorzeichen geschrieben wird. In diesem Modus werden die
Ausgaben in Zahlensystemen mit anderer Basis als 10 durch entsprechende Präfixe gekennzeichnet.

Ausgabetypen für Gleitkommazahlen:

Zeichen Bedeutung
e Die Zahl wird in wissenschaftlicher Schreibweise ausgegeben, wobei ein kleines "e"
zur Trennung von Mantisse und Exponent verwendet wird.
E Die Zahl wird in wissenschaftlicher Schreibweise ausgegeben, wobei ein großes "E"
zur Trennung von Mantisse und Exponent verwendet wird.
f Die Zahl wird als Dezimalzahl mit Dezimalpunkt ausgegeben.
g Die Zahl wird, wenn sie nicht zu lang ist, wie bei f ausgegeben. Für zu lange
Zahlen wird automatisch der e-Typ verwendet.
G Wie g, nur dass für zu lange Zahlen der E-Typ verwendet wird.
n Wie g, aber es wird versucht, ein an die Region angepasstes Trennzeichen zu verwenden.
% Der Zahlenwert wird zuerst mit hundert multipliziert und dann ausgegeben,
gefolgt von einem Prozentzeichen.
(keine
Angabe)
Wie g, aber es wird mindestens eine Nachkommastelle angegeben.
Genauigkeit bei Gleitkommazahlen - precision

Um die Anzahl von Nachkommastellen bei der Ausgabe von Gleitkommazahlen festzulegen, wird die gewünschte
Anzahl, durch einen Punkt abgetrennt, zwischen die minimale Länge und den Ausgabetyp geschrieben.

Tausendertrennung - die Optionen "," und "_"

Mit den Optionen "," und "_" kann ein Tausendertrennzeichen gesetzt werden.

Zeichensätze und Sonderzeichen

Um mit Zeichen Bildschirmausgaben zu produzieren oder andere Operationen mit Zeichen durchführen zu können,
hat man Übersetzungstabellen, die sogenannten Codepages (Zeichensatztabellen) definiert, die jedem
Buchstaben eine bestimmte Zahl zuordnen.

Um den Zahlenwert eines Zeichens zu ermitteln, gibt es in Python die Built-in Function ord.

Umgekehr liefert die Built-in Function chr das zu einm Byte gehörige Zeichen.

Mit der Escape-Sequenz \x und einer zweistelligen Hexadezimalzahl ist es möglich, einzelne
Bytes in str-Instanzen direkt zu codieren.
Beispiel: "\xdc" => 'Ü'

Zeichen des erweiterten ASCII-Zeichensatzes benötigen 8 Bit pro Zeichen im Speicher.

Der Standard Unicode sieht eine variable Codierngslänge für einzelne Zeichen vor. Unicode ist eine
riesige Tabelle, die jedem bekannten Zeichen eine Zahl, den sogenannten Codepoint, zuweist
Das wirklich Neue an Unicode ist das Verfahren UTF (Unicode Transformation Format), das
Codepoints durch Byte-Folgen unterschiedlicher Länge darstellen kann. Das am weitesten verbreitete
Transformationsformat ist UTF-8. UTF-8 verwendet bis zu 7 Byte, um ein einzelnes Zeichen zu codieren,
wobei die tatsächliche Länge von der Häufigkeit des Zeichens in Texten abhängt.

Unicode-Zeichen beginnen mit der Escape-Sequenz \u.

Für die Übertragung (z.B. in Netzwerken) müssen str-Instanzen codiert (Methode encode) werden.
Um aus einer codierten bytes-Instanz wieder ein str-Objekt zu machen, verwendet man die Methode decode.

Codecs

Beispiele für Codierungsverfahren:

Name in Python Eigenschaften
"ascii" Codierung mithilfe der ASCII-Tabelle; englisches Alphabet, englische Ziffern, Satzzeichen
und Steuerzeichen; ein Byte pro Zeichen.
"utf8" Codierung für alle Unicode-Codepoints; abwärtskompatibel mit ASCII; variable Anzahl
Bytes pro Zeichen.
"iso-8859-15" Codierung der Zeichen für Westeuropa, wie sie von der Internationalen Organisation
für Normung (ISO) 1999 standardisiert wurde.
"cp1252" Codierung für Westeuropa, die von einigen Windows-Versionen verwendet wird; zusätzlich
zu den ASCII-Zeichen Unterstützung für europäische Sonderzeichen, insbesondere das
Eurozeichen; abwärtskompatibel mit ASCII; ein Byte pro Zeichen.

Die Methoden encode und decode bieten einen optionalen Parameter namens errors,
der die Vorgehensweise definiert, wenn im zu codierenden String ein Zeichen enthalten ist,
welches von der gewählten Codepage nicht unterstützt wird. Für errors können folgende Werte
übergeben werden:

Wert Bedeutung
"strict" Standardeinstellung. Jedes nicht codierbare Zeichen führt zu einem Fehler.
"ignore" Nicht codierbare Zeichen werden ignoriert.
"replace" Nicht codierbare Zeichen werden durch einen Platzhalter ersetzt. Beim Encodieren durch
das Fragezeichen "?", beim Decodieren durch das Unicode-Zeichen U+FFFD.
"xmlcharrefreplace" Nicht codierbare Zeichen werden durch ihre XL-Entität ersetzt.
(Nur bei encode möglich.)
"backslashreplace" Nicht codierbare Zeichen werden durch eine Escape-Sequenz ersetzt.
(Nur bei encode möglich.)

Encoding-Deklaration

Damit Sonderzeichen nicht nur innerhalb von Strings, sondern auch in Kommentaren geschrieben werden dürfen,
muss im Kopf einer Python-Programmdatei eine Encoding-Deklaration stehen:
# -*- coding: cp1252 -*-