Einführung
In diesem Abschnitt werden Methoden zur Arbeit mit Text vorgestellt.
This tutorial is from open-source community. Access the source code
💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken
In diesem Abschnitt werden Methoden zur Arbeit mit Text vorgestellt.
String-Literale werden in Programmen mit Anführungszeichen geschrieben.
## Einzelnes Anführungszeichen
a = 'Yeah but no but yeah but...'
## Doppeltes Anführungszeichen
b = "computer says no"
## Dreifache Anführungszeichen
c = '''
Look into my eyes, look into my eyes, the eyes, the eyes, the eyes,
not around the eyes,
don't look around the eyes,
look into my eyes, you're under.
'''
Normalerweise können Strings nur eine einzelne Zeile umfassen. Mit dreifachen Anführungszeichen werden alle im Rahmen mehrerer Zeilen eingeschlossenen Texte inklusive der gesamten Formatierung erfasst.
Es besteht kein Unterschied zwischen der Verwendung von einfachen (') und doppelten (") Anführungszeichen. Allerdings muss das gleiche Anführungszeichentyp verwendet werden, um eine Zeichenkette zu beginnen und zu beenden.
Umgebungszeichen werden verwendet, um Steuerzeichen und Zeichen darzustellen, die nicht einfach direkt am Tastatur eingegeben werden können. Hier sind einige häufige Umgebungszeichen:
'\n' Zeilenumbruch
'\r' Wagenrücklauf
'\t' Tabulator
'\'' Literales einfaches Anführungszeichen
'\"' Literales doppeltes Anführungszeichen
'\\' Literales Backslash
Jedes Zeichen in einer Zeichenkette wird intern als sogenannter Unicode-"Codepunkt" gespeichert, der eine Ganzzahl ist. Sie können einen genauen Codepunkt-Wert mithilfe der folgenden Escape-Sequenzen angeben:
a = '\xf1' ## a = 'ñ'
b = '\u2200' ## b = '∀'
c = '\U0001D122' ## c = '𝄢'
d = '\N{FOR ALL}' ## d = '∀'
Die Unicode-Charakterdatenbank ist eine Referenz für alle verfügbaren Zeichensymbole.
Strings funktionieren wie ein Array für den Zugriff auf einzelne Zeichen. Sie verwenden einen ganzzahligen Index, der bei 0 beginnt. Negative Indizes geben eine Position relativ zum Ende der Zeichenkette an.
a = 'Hello world'
b = a[0] ## 'H'
c = a[4] ## 'o'
d = a[-1] ## 'd' (Ende der Zeichenkette)
Sie können auch Teile oder Substrings auswählen, indem Sie einen Bereich von Indizes mit :
angeben.
d = a[:5] ## 'Hello'
e = a[6:] ## 'world'
f = a[3:8] ## 'lo wo'
g = a[-5:] ## 'world'
Das Zeichen am Endindex ist nicht enthalten. Fehlende Indizes nehmen den Anfang oder das Ende der Zeichenkette an.
Verknüpfung, Länge, Mitgliedschaft und Replikation.
## Verknüpfung (+)
a = 'Hello' + 'World' ## 'HelloWorld'
b = 'Say'+ a ## 'Say HelloWorld'
## Länge (len)
s = 'Hello'
len(s) ## 5
## Mitgliedschaftstest (`in`, `not in`)
t = 'e' in s ## True
f = 'x' in s ## False
g = 'hi' not in s ## True
## Replikation (s * n)
rep = s * 5 ## 'HelloHelloHelloHelloHello'
Strings haben Methoden, die verschiedene Operationen mit den String-Daten ausführen.
Beispiel: Entfernen von führenden / nachfolgenden Leerzeichen.
s =' Hello '
t = s.strip() ## 'Hello'
Beispiel: Groß-/Kleinschreibung umwandeln.
s = 'Hello'
l = s.lower() ## 'hello'
u = s.upper() ## 'HELLO'
Beispiel: Text ersetzen.
s = 'Hello world'
t = s.replace('Hello', 'Hallo') ## 'Hallo world'
Weitere String-Methoden:
Strings haben eine Vielzahl von anderen Methoden zum Testen und Bearbeiten von Text-Daten. Dies ist ein kleiner Auszug von Methoden:
s.endswith(suffix) ## Überprüfen, ob der String mit suffix endet
s.find(t) ## Erstes Vorkommen von t in s
s.index(t) ## Erstes Vorkommen von t in s
s.isalpha() ## Überprüfen, ob die Zeichen alphabetisch sind
s.isdigit() ## Überprüfen, ob die Zeichen numerisch sind
s.islower() ## Überprüfen, ob die Zeichen in Kleinbuchstaben sind
s.isupper() ## Überprüfen, ob die Zeichen in Großbuchstaben sind
s.join(slist) ## Verknüpfen einer Liste von Strings mit s als Trennzeichen
s.lower() ## In Kleinbuchstaben umwandeln
s.replace(old,new) ## Text ersetzen
s.rfind(t) ## Suchen nach t von Ende des Strings
s.rindex(t) ## Suchen nach t von Ende des Strings
s.split([delim]) ## String in Liste von Teilstrings aufteilen
s.startswith(prefix) ## Überprüfen, ob der String mit prefix beginnt
s.strip() ## Führende/Nachfolgende Leerzeichen entfernen
s.upper() ## In Großbuchstaben umwandeln
Strings sind "immutable" oder schreibgeschützt. Einmal erstellt, kann der Wert nicht geändert werden.
>>> s = 'Hello World'
>>> s[1] = 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError:'str' object does not support item assignment
>>>
Alle Operationen und Methoden, die String-Daten manipulieren, erzeugen immer neue Strings.
Verwenden Sie str()
, um einen beliebigen Wert in einen String zu konvertieren. Das Ergebnis ist ein String, der denselben Text enthält, den die print()
-Anweisung erzeugt hätte.
>>> x = 42
>>> str(x)
'42'
>>>
Eine Zeichenkette von 8-Bit-Byte, die bei der niederen Ebene der I/O häufig vorkommt, wird wie folgt geschrieben:
data = b'Hello World\r\n'
Indem Sie ein kleines b vor der ersten Anführungszeichen setzen, geben Sie an, dass es sich um eine Byte-Zeichenkette handelt, im Gegensatz zu einer Textzeichenkette.
Die meisten üblichen String-Operationen funktionieren.
len(data) ## 13
data[0:5] ## b'Hello'
data.replace(b'Hello', b'Cruel') ## b'Cruel World\r\n'
Das Indexieren ist etwas anders, da es Byte-Werte als Integer zurückgibt.
data[0] ## 72 (ASCII-Code für 'H')
Konvertierung zu/aus Textzeichenketten.
text = data.decode('utf-8') ## bytes -> text
data = text.encode('utf-8') ## text -> bytes
Das Argument 'utf-8'
gibt eine Zeichensatzkodierung an. Andere übliche Werte sind 'ascii'
und 'latin1'
.
Rohstrings sind String-Literale mit einem nicht interpretierten Backslash. Sie werden durch Präfixieren der anfänglichen Anführungszeichen mit einem kleinen "r" angegeben.
>>> rs = r'c:\newdata\test' ## Roh (nicht interpretierten Backslash)
>>> rs
'c:\\newdata\\test'
Der String ist der literale Text, der darin eingeschlossen ist, genau wie er eingegeben wurde. Dies ist nützlich in Situationen, in denen der Backslash besondere Bedeutung hat. Beispiel: Dateiname, reguläre Ausdrücke usw.
Eine Zeichenkette mit formatierter Ausdruckssubstitution.
>>> name = 'IBM'
>>> shares = 100
>>> price = 91.1
>>> a = f'{name:>10s} {shares:10d} {price:10.2f}'
>>> a
' IBM 100 91.10'
>>> b = f'Cost = ${shares*price:0.2f}'
>>> b
'Cost = $9110.00'
>>>
Hinweis: Dies erfordert Python 3.6 oder neuer. Die Bedeutung der Formatcodes wird später behandelt.
In diesen Übungen werden Sie mit Operationen auf Python's String-Typ experimentieren. Sie sollten dies an der Python interaktiven Eingabeaufforderung machen, wo Sie die Ergebnisse leicht sehen können. Wichtiger Hinweis:
In Übungen, in denen Sie mit dem Interpreter interagieren sollen, ist
>>>
der Interpreter-Prompt, den Sie erhalten, wenn Python Sie auffordert, eine neue Anweisung einzugeben. Einige Anweisungen in der Übung umfassen mehrere Zeilen - um diese Anweisungen auszuführen, müssen Sie möglicherweise einige Male 'Return' drücken. Ein erneuter Hinweis: Sie TIppen NICHT das>>>
ein, wenn Sie diese Beispiele ausprobieren.
Beginnen Sie mit der Definition einer Zeichenkette, die eine Reihe von Aktiensymbole enthält, wie folgt:
>>> symbols = 'AAPL,IBM,MSFT,YHOO,SCO'
>>>
Zeichenketten sind Arrays von Zeichen. Versuchen Sie, ein paar Zeichen zu extrahieren:
>>> symbols[0]
?
>>> symbols[1]
?
>>> symbols[2]
?
>>> symbols[-1] ## Letztes Zeichen
?
>>> symbols[-2] ## Negative Indizes beginnen am Ende der Zeichenkette
?
>>>
In Python sind Zeichenketten schreibgeschützt.
Verifizieren Sie dies, indem Sie versuchen, das erste Zeichen von symbols
in einen Kleinbuchstaben 'a' umzuwandeln.
>>> symbols[0] = 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>>
Obwohl String-Daten schreibgeschützt sind, können Sie jederzeit eine Variable neu zuweisen, um einen neu erstellten String zu erhalten.
Versuchen Sie die folgende Anweisung, die ein neues Symbol "GOOG" am Ende von symbols
anfügt:
>>> symbols = symbols + 'GOOG'
>>> symbols
'AAPL,IBM,MSFT,YHOO,SCOGOOG'
>>>
Ups! Das war nicht das, was Sie wollten. Beheben Sie es, so dass die Variable symbols
den Wert 'AAPL,IBM,MSFT,YHOO,SCO,GOOG'
enthält.
>>> symbols =?
>>> symbols
'AAPL,IBM,MSFT,YHOO,SCO,GOOG'
>>>
Fügen Sie 'HPQ'
am Anfang der Zeichenkette hinzu:
>>> symbols =?
>>> symbols
'HPQ,AAPL,IBM,MSFT,YHOO,SCO,GOOG'
>>>
In diesen Beispielen sieht es so aus, als würde die ursprüngliche Zeichenkette modifiziert werden, was offensichtlich gegen die schreibgeschützte Natur von Zeichenketten verstößt. Tatsächlich nicht. Jede Operation auf Zeichenketten erzeugt jeweils einen völlig neuen String. Wenn die Variablenname symbols
neu zugewiesen wird, verweist er auf den neu erstellten String. Danach wird die alte Zeichenkette zerstört, da sie nicht mehr verwendet wird.
Experimentieren Sie mit dem in
-Operator, um nach Teilzeichenketten zu suchen. Am interaktiven Prompt versuchen Sie diese Operationen:
>>> 'IBM' in symbols
?
>>> 'AA' in symbols
True
>>> 'CAT' in symbols
?
>>>
Warum hat die Prüfung auf 'AA'
True
zurückgegeben?
Am Python interaktiven Prompt können Sie mit einigen der String-Methoden experimentieren.
>>> symbols.lower()
?
>>> symbols
?
>>>
Denken Sie daran, dass Strings immer schreibgeschützt sind. Wenn Sie das Ergebnis einer Operation speichern möchten, müssen Sie es in eine Variable ablegen:
>>> lowersyms = symbols.lower()
>>>
Versuchen Sie einige weitere Operationen:
>>> symbols.find('MSFT')
?
>>> symbols[13:17]
?
>>> symbols = symbols.replace('SCO','DOA')
>>> symbols
?
>>> name = ' IBM \n'
>>> name = name.strip() ## Entfernt die umgebenden Leerzeichen
>>> name
?
>>>
Manchmal möchten Sie einen String erstellen und die Werte von Variablen darin einfügen.
Um das zu tun, verwenden Sie einen f-String. Beispielsweise:
>>> name = 'IBM'
>>> shares = 100
>>> price = 91.1
>>> f'{shares} shares of {name} at ${price:0.2f}'
'100 shares of IBM at $91.10'
>>>
Ändern Sie das mortgage.py
-Programm aus Übung 1.10, um seine Ausgabe mit f-Strings zu erstellen. Versuchen Sie, es so zu gestalten, dass die Ausgabe gut ausgerichtet ist.
Eine Einschränkung der grundlegenden String-Operationen ist, dass sie keine Art von fortgeschrittenen Mustervergleichen unterstützen. Dazu müssen Sie sich auf das re
-Modul von Python und reguläre Ausdrücke verlassen. Das Thema der Behandlung regulärer Ausdrücke ist ein umfangreiches Thema, aber hier ist ein kurzes Beispiel:
>>> text = 'Today is 3/27/2018. Tomorrow is 3/28/2018.'
>>> ## Findet alle Vorkommen eines Datums
>>> import re
>>> re.findall(r'\d+/\d+/\d+', text)
['3/27/2018', '3/28/2018']
>>> ## Ersetzt alle Vorkommen eines Datums durch Ersatztext
>>> re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
'Today is 2018-3-27. Tomorrow is 2018-3-28.'
>>>
Weitere Informationen über das re
-Modul finden Sie in der offiziellen Dokumentation unter https://docs.python.org/library/re.html.
Wenn Sie beginnen, mit dem Interpreter zu experimentieren, möchten Sie oft mehr über die von verschiedenen Objekten unterstützten Operationen wissen. Beispielsweise wie können Sie herausfinden, welche Operationen auf einem String verfügbar sind?
Je nach Ihrem Python-Umgebung können Sie möglicherweise eine Liste der verfügbaren Methoden über die Tab-Vervollständigung sehen. Beispielsweise versuchen Sie, dies einzugeben:
>>> s = 'hello world'
>>> s.<tab taste>
>>>
Wenn das Drücken der Tab-Taste nichts bewirkt, können Sie auf die integrierte dir()
-Funktion zurückgreifen. Beispielsweise:
>>> s = 'hello'
>>> dir(s)
['__add__', '__class__', '__contains__',..., 'find', 'format',
'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace',
'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition',
'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit',
'rstrip','split','splitlines','startswith','strip','swapcase',
'title', 'translate', 'upper', 'zfill']
>>>
dir()
liefert eine Liste aller Operationen, die nach dem (.)
erscheinen können. Verwenden Sie die help()
-Anweisung, um weitere Informationen über eine bestimmte Operation zu erhalten:
>>> help(s.upper)
Hilfe zu eingebauter Funktion upper:
upper(...)
S.upper() -> string
Gibt eine Kopie der Zeichenkette S in Großbuchstaben zurück.
>>>
Herzlichen Glückwunsch! Sie haben das Strings-Labor abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.