Mit Strings in Python arbeiten

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor erhalten Sie praktische Erfahrungen mit Strings in Python, einem grundlegenden Datentyp. Sie beginnen mit dem Verständnis der Grundlagen von Strings, einschließlich Erstellung, Unveränderlichkeit und Zugriff auf einzelne Zeichen sowohl mit positiver als auch mit negativer Indizierung.

Aufbauend auf dieser Grundlage lernen Sie, wie Sie Teilstrings mithilfe von Slicing extrahieren, verschiedene String-Operatoren und Escape-Zeichen für Manipulation und spezielle Formatierung verwenden und verschiedene Methoden zur Formatierung von Strings erkunden. Abschließend werden Sie gängige String-Methoden untersuchen, um Operationen wie Suchen, Ersetzen und Modifizieren von String-Inhalten durchzuführen.

Grundlagen und Indizierung von Strings verstehen

In diesem Schritt lernen Sie die grundlegenden Konzepte von Strings in Python kennen, einschließlich der Erstellung und des Zugriffs auf einzelne Zeichen mithilfe der Indizierung.

Strings sind Zeichenfolgen und gehören zu den gängigsten Datentypen in Python. Sie können Strings mit einfachen Anführungszeichen ('...') oder doppelten Anführungszeichen ("...") erstellen. Ein leerer String kann mit str() erstellt werden.

Beginnen wir mit der Erstellung eines einfachen Strings und der Überprüfung seines Typs und seiner Speicheradresse. Öffnen Sie das integrierte Terminal in der WebIDE und wechseln Sie in den interaktiven Python-Modus, indem Sie python eingeben.

python

Geben Sie nun den folgenden Code in die interaktive Python-Shell ein:

a = "hello"
print(id(a), type(a))
a = "hi"
print(id(a), type(a))
<placeholder> <class 'str'>
<placeholder> <class 'str'>

Wie Sie aus der Ausgabe ersehen können, ändert sich die Speicheradresse der Variablen a, wenn sich ihr Wert ändert. Dies zeigt, dass Strings unveränderliche Datentypen in Python sind. Geben Sie exit() ein, um die interaktive Python-Shell zu verlassen.

exit()

Nun erkunden wir die String-Indizierung. Strings sind geordnete Sequenzen, und Sie können auf einzelne Zeichen über ihren Index (Position) zugreifen. In Python beginnt die Indizierung mit 0 für das erste Zeichen.

Erstellen Sie eine neue Datei namens string_indexing.py im Verzeichnis ~/project mit dem WebIDE-Editor.

## string_indexing.py
a = "Hello"
print(a[0])
print(a[1])
print(a[2])
print(a[3])
print(a[4])
## print(a[5]) ## Dies würde einen Fehler verursachen, da der Index außerhalb des Bereichs liegt.

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python ~/project/string_indexing.py
H
e
l
l
o

Python unterstützt auch die negative Indizierung, mit der Sie auf Zeichen vom Ende des Strings zugreifen können. Das letzte Zeichen hat den Index -1, das vorletzte -2 und so weiter.

Ändern Sie die Datei string_indexing.py, um die negative Indizierung einzuschließen:

## string_indexing.py
a = "Hello"
print(a[0])
print(a[1])
print(a[2])
print(a[3])
print(a[4])
## print(a[5]) ## Dies würde einen Fehler verursachen, da der Index außerhalb des Bereichs liegt.

print(a[-5])
print(a[-4])
print(a[-3])
print(a[-2])
print(a[-1])

Speichern Sie die Datei und führen Sie sie erneut aus:

python ~/project/string_indexing.py
H
e
l
l
o
H
e
l
l
o

Da Strings unveränderlich sind, können Sie ein Zeichen an einem bestimmten Index nicht ändern, indem Sie ihm einen neuen Wert zuweisen. Versuchen wir dies in der interaktiven Python-Shell, um den Fehler zu sehen.

python
a = "12345"
a[0] = "a"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Geben Sie exit() ein, um die interaktive Python-Shell zu verlassen.

exit()

Strings slicen

In diesem Schritt lernen Sie, wie Sie mit Slicing Teilstrings aus einem String extrahieren. Während die Indizierung den Zugriff auf ein einzelnes Zeichen ermöglicht, können Sie mit Slicing eine Zeichensequenz (einen Teilstring) erhalten.

Beim String-Slicing wird die Syntax string[start:end] verwendet. Der Slice enthält das Zeichen am start-Index, schließt jedoch das Zeichen am end-Index aus. Wenn start weggelassen wird, wird standardmäßig der Anfang des Strings (Index 0) verwendet. Wenn end weggelassen wird, wird standardmäßig das Ende des Strings verwendet.

Erstellen Sie eine neue Datei namens string_slicing.py im Verzeichnis ~/project mit dem WebIDE-Editor.

## string_slicing.py
a = "Hello"
print(a[0:3])  ## Gibt Zeichen am Index 0, 1 und 2 zurück
print(a[2:4])  ## Gibt Zeichen am Index 2 und 3 zurück
print(a[:4])   ## start ist standardmäßig 0, gibt Zeichen am Index 0, 1, 2 und 3 zurück
print(a[3:])   ## end ist standardmäßig das Ende, gibt Zeichen am Index 3 und 4 zurück
print(a[-3:-1]) ## Gibt Zeichen am Index -3 und -2 zurück
print(a[-2:-1]) ## Gibt Zeichen am Index -2 zurück
print(a[-2:])  ## end ist standardmäßig das Ende, gibt Zeichen am Index -2 und -1 zurück
print(a[::])   ## start ist standardmäßig 0, end ist standardmäßig das Ende, gibt den gesamten String zurück

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python ~/project/string_slicing.py
Hel
ll
Hell
lo
ll
l
lo
Hello

Slicing unterstützt auch einen dritten Parameter, step, mit der Syntax string[start:end:step]. Der step bestimmt, wie viele Zeichen zwischen den Auswahlen übersprungen werden. Ein positiver Schritt bewegt sich vorwärts, während ein negativer Schritt sich rückwärts bewegt. Ein Schritt von 0 ist nicht erlaubt.

Wenn der Schritt negativ ist, ist der Standard-start das Ende des Strings und der Standard-end der Anfang des Strings (Index 0). Die Regel "inklusive Start, exklusives Ende" gilt weiterhin, aber der start-Index ist numerisch größer als der end-Index.

Ändern Sie die Datei string_slicing.py, um Beispiele mit dem step-Parameter einzufügen:

## string_slicing.py
a = "Hello"
print(a[0:3])
print(a[2:4])
print(a[:4])
print(a[3:])
print(a[-3:-1])
print(a[-2:-1])
print(a[-2:])
print(a[::])

a = "123456789"
print(a[0:9:2])   ## Wählt Zeichen mit einem Schritt von 2 aus
print(a[2:7:3])   ## Wählt Zeichen von Index 2 bis 7 mit einem Schritt von 3 aus
print(a[::-1])    ## Kehrt den gesamten String mit einem Schritt von -1 um
print(a[5:1:-1])  ## Kehrt Zeichen von Index 5 bis 1 mit einem Schritt von -1 um

Speichern Sie die Datei und führen Sie sie erneut aus:

python ~/project/string_slicing.py
Hel
ll
Hell
lo
ll
l
lo
Hello
13579
36
987654321
65432

Slicing behandelt automatisch Indizes außerhalb des Bereichs für den end-Parameter.

Fügen Sie die folgenden Zeilen zu string_slicing.py hinzu, um zu sehen, wie Slicing mit Indizes außerhalb des Bereichs umgeht:

## string_slicing.py
a = "Hello"
print(a[0:3])
print(a[2:4])
print(a[:4])
print(a[3:])
print(a[-3:-1])
print(a[-2:-1])
print(a[-2:])
print(a[::])

a = "123456789"
print(a[0:9:2])
print(a[2:7:3])
print(a[::-1])
print(a[5:1:-1])

a = "123456"
print(a[2:10])
print(a[-3:-100:-1])

Speichern Sie die Datei und führen Sie sie aus:

python ~/project/string_slicing.py
Hel
ll
Hell
lo
ll
l
lo
Hello
13579
36
987654321
65432
3456
4321

String-Operatoren und Escape-Zeichen verwenden

In diesem Schritt lernen Sie gängige Operatoren für die Arbeit mit Strings und die Verwendung von Escape-Zeichen zur Darstellung von Sonderzeichen innerhalb von Strings kennen.

Python bietet mehrere Operatoren für die Arbeit mit Strings. Die Operatoren in und not in prüfen auf die Anwesenheit von Teilstrings, während der Operator + Strings verknüpft und der Operator * einen String wiederholt.

Erstellen Sie eine neue Datei namens string_operators.py im Verzeichnis ~/project.

## string_operators.py

## in operator
print('e' in 'Hello')
print('f' in 'Hello')

## not in operator
print('e' not in 'Hello')
print('f' not in 'Hello')

## String-Verkettung (+)
print('Hello' + ' World')
print('Tomorrow is ' + 'Saturday')

## Wiederholungsoperator (*)
print('=' * 15 + 'Test' + '=' * 15)
print('Hello ' * 4)

Speichern Sie die Datei und führen Sie sie aus:

python ~/project/string_operators.py
True
False
False
True
Hello World
Tomorrow is Saturday
===============Test===============
Hello Hello Hello Hello

Nun betrachten wir die Escape-Zeichen. Escape-Zeichen sind spezielle Sequenzen, die Zeichen darstellen, die schwer oder unmöglich direkt in einen String einzugeben sind. Sie werden typischerweise mit einem Backslash (\) eingeleitet.

Erstellen Sie eine neue Datei namens escape_characters.py im Verzeichnis ~/project.

## escape_characters.py

## Zeilenfortsetzung (\)
print('hello \
world!')

## Anführungszeichen (\' und \")
print('It\'s OK!')
print("He said, \"Hello!\"")

## Neue Zeile (\n)
print("Hello World!\nHello World!")

## Wagenrücklauf (\r)
print("Hello\rWorld!") ## World! überschreibt Hello

## Horizontaler Tabulator (\t)
print("Hello\tWorld!")

## Vertikaler Tabulator (\v)
print("Hello\vWorld!")

## Oktale Darstellung
print("\110\145\154\154\157\40\127\157\162\154\144\41") ## Stellt "Hello World!" dar

## Hexadezimale Darstellung
print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21") ## Stellt "Hello World!" dar

## Vermeidung von Escaping mit Raw Strings (r)
print("C:\tt\no\reseach") ## Standardausgabe
print(r"C:\tt\no\reseach") ## Raw String-Ausgabe

Speichern Sie die Datei und führen Sie sie aus:

python ~/project/escape_characters.py
hello world!
It's OK!
He said, "Hello!"
Hello World!
Hello World!
World!
Hello	World!
Hello
      World!
Hello World!
Hello World!
C:
o\reseach
C:\tt\no\reseach

Beachten Sie, wie der Raw String (r"...") Backslashes als literale Zeichen behandelt, was für Pfade oder reguläre Ausdrücke nützlich ist, bei denen Backslashes häufig vorkommen.

Strings formatieren

In diesem Schritt lernen Sie verschiedene Möglichkeiten kennen, Strings in Python zu formatieren, was für die Erstellung lesbarer und gut strukturierter Ausgaben unerlässlich ist.

Während die String-Verkettung mit dem +-Operator funktioniert, kann sie umständlich werden, insbesondere wenn Strings mit anderen Datentypen wie Zahlen kombiniert werden.

Erstellen Sie eine neue Datei namens string_formatting.py im Verzeichnis ~/project.

## string_formatting.py

## Verkettung mit Typumwandlung
print('This year is ' + str(2021) + ' year')

## Dies würde einen Fehler verursachen:
## print('This year is ' + 2021 + ' year')

Speichern Sie die Datei und führen Sie sie aus:

python ~/project/string_formatting.py
This year is 2021 year

Python bietet elegantere Möglichkeiten zur Formatierung von Strings.

f-String-Formatierung

f-Strings (formatierte String-Literale) wurden in Python 3.6 eingeführt und bieten eine prägnante Möglichkeit, Ausdrücke in String-Literale einzubetten. Sie stellen dem String ein f oder F voran und platzieren Ausdrücke in geschweiften Klammern {}.

Fügen Sie den folgenden Code zu string_formatting.py hinzu:

## string_formatting.py

## Verkettung mit Typumwandlung
print('This year is ' + str(2021) + ' year')

## f-string grundlegende Verwendung
year = 2021
month = 4
day = 1
print(f"Today is {year} year {month} month {day} day")

Speichern und ausführen:

python ~/project/string_formatting.py
This year is 2021 year
Today is 2021 year 4 month 1 day
Format-Spezifizierer

Sie können optionale Format-Spezifizierer nach einem Doppelpunkt (:) innerhalb der geschweiften Klammern verwenden, um die Formatierung des eingebetteten Ausdrucks zu steuern.

Fügen Sie weitere f-String-Beispiele mit Format-Spezifizierern hinzu:

## string_formatting.py

## Verkettung mit Typumwandlung
print('This year is ' + str(2021) + ' year')

## f-string grundlegende Verwendung
year = 2021
month = 4
day = 1
print(f"Today is {year} year {month} month {day} day")

## Format-Spezifizierer
pi = 3.1415926
print(f'Pi gerundet auf zwei Dezimalstellen ist: {pi:.2f}') ## Präzision angeben
print(f'Pi mit Standardpräzision ist: {pi:f}')       ## Standardpräzision

## Feldbreite und Ausrichtung
name1 = 'Bob'
age1 = 20
name2 = 'John'
age2 = 25
print(f'{name1:6}=>{age1:6}\n{name2:6}=>{age2:6}')

## Nullauffüllung
total = 2000
print(f'Gesamtbetrag: {total:08} Yuan')

## Tausendertrennzeichen
print(f'{100000000000}')
print(f'{100000000000:_}')
print(f'{100000000000:,}')

## Zahlenbasis-Trennzeichen
print(f'{0b10000000:_b}') ## Binär-Trennzeichen
print(f'{128:_b}')      ## Dezimal zu Binär mit Trennzeichen
print(f'{10000:_o}')    ## Dezimal zu Oktal mit Trennzeichen
print(f'{12800000:_x}') ## Dezimal zu Hexadezimal mit Trennzeichen

## Prozentformatierung
print(f'{0.25:%}')     ## Standardpräzision
print(f'{0.25:.2%}')  ## Präzision angeben

## Andere Modifikatoren (!a, !s, !r)
name = 'Alice'
print(f'{name!a}')
print(f'{name!s}')
print(f'{name!r}')

## Datums-/Zeitformatierung
import datetime
d = datetime.datetime(2021, 10, 1, 8, 15, 58)
print(f'{d:%Y-%m-%d %H:%M:%S}')

Speichern und ausführen:

python ~/project/string_formatting.py
This year is 2021 year
Today is 2021 year 4 month 1 day
Pi rounded to two decimal places is: 3.14
Pi with default precision is: 3.141593
Bob   =>    20
John  =>    25
Total amount: 00002000 Yuan
100000000000
100_000_000_000
100,000,000,000
1000_0000
1000_0000
23420
c35000
25.000000%
25.00%
'Alice'
Alice
'Alice'
2021-10-01 08:15:58

format() Methode

Die Methode str.format() ist eine weitere Möglichkeit, Strings zu formatieren. Sie verwenden geschweifte Klammern {} als Platzhalter und übergeben die einzufügenden Werte als Argumente an die format()-Methode.

Fügen Sie Beispiele mit der format()-Methode hinzu:

## string_formatting.py

## ... (vorheriger Code) ...

## format() Methode - Positionsargumente
print('We are the {} who say "{}!"'.format('knights', 'Ni'))
print('{0} and {1}'.format('spam', 'eggs'))
print('{1} and {0}'.format('spam', 'eggs'))

## format() Methode - Schlüsselwortargumente
print('He is {age} years old and works in {city}.'.format(age=25, city='Beijing'))

## format() Methode - Format-Spezifizierer (ähnlich wie f-Strings)
pi = 3.1415926
print('Pi gerundet auf zwei Dezimalstellen ist: {:.2f}'.format(pi))

## Datums-/Zeitformatierung mit format()
import datetime
d = datetime.datetime(2021, 10, 1, 8, 15, 58)
print('{:%Y-%m-%d %H:%M:%S}'.format(d))

Speichern und ausführen:

python ~/project/string_formatting.py
This year is 2021 year
Today is 2021 year 4 month 1 day
Pi rounded to two decimal places is: 3.14
Pi with default precision is: 3.141593
Bob   =>    20
John  =>    25
Total amount: 00002000 Yuan
100000000000
100_000_000_000
100,000,000,000
1000_0000
1000_0000
23420
c35000
25.000000%
25.00%
'Alice'
Alice
'Alice'
2021-10-01 08:15:58
We are the knights who say "Ni!"
spam and eggs
eggs and spam
He is 25 years old and works in Beijing.
Pi rounded to two decimal places is: 3.14
2021-10-01 08:15:58

%-Formatierung (Legacy)

Der %-Operator kann auch für die String-Formatierung verwendet werden, ist aber älter und aufgrund einiger Eigenheiten weniger empfehlenswert. Wir zeigen nur ein kurzes Beispiel.

Fügen Sie Folgendes zu string_formatting.py hinzu:

## string_formatting.py

## ... (vorheriger Code) ...

## %-Formatierung (Legacy)
print('%s %s'%('Hello','World'))
print('Pi rounded to two decimal places is: %.2f'%(3.1415926))

Speichern und ausführen:

python ~/project/string_formatting.py
This year is 2021 year
Today is 2021 year 4 month 1 day
Pi rounded to two decimal places is: 3.14
Pi with default precision is: 3.141593
Bob   =>    20
John  =>    25
Total amount: 00002000 Yuan
100000000000
100_000_000_000
100,000,000,000
1000_0000
1000_0000
23420
c35000
25.000000%
25.00%
'Alice'
Alice
'Alice'
2021-10-01 08:15:58
We are the knights who say "Ni!"
spam and eggs
eggs and spam
He is 25 years old and works in Beijing.
Pi rounded to two decimal places is: 3.14
2021-10-01 08:15:58
Hello World
Pi rounded to two decimal places is: 3.14

Dreifache Anführungszeichen

Strings, die in dreifache Anführungszeichen ('''...''' oder """...""") eingeschlossen sind, können sich über mehrere Zeilen erstrecken und alle Leerzeichen darin enthalten. Dies ist nützlich, um mehrzeilige Strings zu erstellen oder die Formatierung beizubehalten.

Fügen Sie ein Beispiel für einen String mit dreifachen Anführungszeichen hinzu:

## string_formatting.py

## ... (vorheriger Code) ...

## Dreifache Anführungszeichen
print('''\
===========Strings===========

Triple-quoted strings preserve whitespace,
allowing for formatted output.
''')

Speichern und ausführen:

python ~/project/string_formatting.py
This year is 2021 year
Today is 2021 year 4 month 1 day
Pi rounded to two decimal places is: 3.14
Pi with default precision is: 3.141593
Bob   =>    20
John  =>    25
Total amount: 00002000 Yuan
100000000000
100_000_000_000
100,000,000,000
1000_0000
1000_0000
23420
c35000
25.000000%
25.00%
'Alice'
Alice
'Alice'
2021-10-01 08:15:58
We are the knights who say "Ni!"
spam and eggs
eggs and spam
He is 25 years old and works in Beijing.
Pi rounded to two decimal places is: 3.14
2021-10-01 08:15:58
Hello World
Pi rounded to two decimal places is: 3.14
===========Strings===========

Triple-quoted strings preserve whitespace,
allowing for formatted output.

Häufige String-Methoden erkunden

In diesem Schritt werden wir einige der vielen integrierten Methoden untersuchen, die für String-Objekte in Python verfügbar sind. Diese Methoden bieten praktische Möglichkeiten zur Manipulation und Arbeit mit Strings.

Sie können eine Liste aller verfügbaren Methoden und Attribute für ein String-Objekt mit der Funktion dir() anzeigen. Versuchen wir dies in der interaktiven Python-Shell.

Öffnen Sie das integrierte Terminal und starten Sie den interaktiven Python-Modus:

python
a = 'hello'
dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

Um zu erfahren, wie eine bestimmte Methode funktioniert, können Sie die Funktion help() verwenden. Sehen wir uns zum Beispiel an, wie die Methode upper() verwendet wird.

help(a.upper)
Help on built-in function upper:

upper() method of builtins.str instance
    Return a copy of the string converted to uppercase.

Die Hilfe-Dokumentation besagt, dass die Methode upper() eine Großbuchstabenversion des Strings zurückgibt. Drücken Sie q, um den Hilfe-Viewer zu verlassen. Geben Sie exit() ein, um die Python-interaktive Shell zu verlassen.

exit()

Nun erkunden wir einige gängige String-Methoden, indem wir ein Python-Skript erstellen. Erstellen Sie eine neue Datei namens string_methods.py im Verzeichnis ~/project.

## string_methods.py

## upper() Methode
a = 'hello world!'
print(a.upper())

## lower() Methode
a = 'Hello World!'
print(a.lower())

## swapcase() Methode
a = 'Hello World!'
print(a.swapcase())

## replace(old, new) Methode
a = 'Hello World!'
print(a.replace('World','Lanqiao'))

## strip() Methode (entfernt standardmäßig führende/nachfolgende Leerzeichen)
a = ' Hello World !  '
print(a.strip())

## strip() mit angegebenen Zeichen
a = '==============Hello World!=============='
print(a.strip('='))

## split() Methode (teilt standardmäßig nach Leerzeichen, gibt eine Liste zurück)
a = 'Hello World      Hello World'
print(a.split())

## split() mit einem angegebenen Trennzeichen
a = 'hello,world'
print(a.split(','))

## join() Methode (verbindet Elemente eines Iterables mit dem String als Trennzeichen)
a = 'Hello World'
print('-'.join(a.split()))

## find() Methode (gibt den niedrigsten Index eines Teilstrings zurück)
a = 'Hello World'
print(a.find('Wo'))

## find() wenn Teilstring nicht gefunden wird
print(a.find('Story'))

## len() Funktion (gibt die Länge des Strings zurück)
a = "Hello"
print(len(a))

Speichern Sie die Datei und führen Sie sie aus:

python ~/project/string_methods.py
HELLO WORLD!
hello world!
hELLO wORLD!
Hello Lanqiao!
Hello World !
Hello World!
['Hello', 'World', 'Hello', 'World']
['hello', 'world']
Hello-World
6
-1
5

Dies sind nur einige der vielen nützlichen String-Methoden, die in Python verfügbar sind. Sie können help() verwenden, um andere Methoden wie startswith(), endswith(), count() usw. zu erkunden.

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Konzepte der Arbeit mit Strings in Python gelernt. Sie haben mit den Grundlagen von Strings begonnen, einschließlich der Erstellung von Strings mit einfachen oder doppelten Anführungszeichen und der Unveränderlichkeit von Strings in Python. Anschließend haben Sie die String-Indizierung erkundet und gelernt, wie Sie mit positiven (beginnend bei 0) und negativen (beginnend bei -1) Indizes auf einzelne Zeichen zugreifen können.