Tekenreeksmethoden in Python

Voltooid

Tekenreeksmethoden zijn een van de meest voorkomende methodetypen in Python. U moet vaak tekenreeksen bewerken om informatie te extraheren of een bepaalde indeling te gebruiken. Python bevat verschillende tekenreeksmethoden die zijn ontworpen om de meest voorkomende en nuttige transformaties uit te voeren.

Tekenreeksmethoden maken deel uit van het str type. Dit betekent dat de methoden bestaan als tekenreeksvariabelen of een deel van de tekenreeks rechtstreeks. De methode .title() retourneert bijvoorbeeld de tekenreeks in eerste hoofdletters en kan rechtstreeks worden gebruikt met een tekenreeks:

print("temperatures and facts about the moon".title())

Output: Temperatures And Facts About The Moon

Hetzelfde gedrag en hetzelfde gebruik vindt plaats op een variabele:

heading = "temperatures and facts about the moon"
heading_upper = heading.title()
print(heading_upper)

Een tekenreeks splitsen

Een veelgebruikte tekenreeksmethode is .split(). Zonder argumenten scheidt de methode de tekenreeks bij elke spatie. Hiermee maakt u een lijst met elk woord of elk getal dat wordt gescheiden door een spatie:

temperatures = "Daylight: 260 F Nighttime: -280 F"
temperatures_list = temperatures.split()
print(temperatures_list)

Output: ['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']

In dit voorbeeld hebt u te maken met meerdere regels, zodat het (impliciete) nieuwe regelteken kan worden gebruikt om de tekenreeks aan het einde van elke regel te splitsen, waarbij één regel wordt gemaakt:

temperatures = "Daylight: 260 F\n Nighttime: -280 F"
temperatures_list = temperatures.split('\n')
print(temperatures_list)

Output: ['Daylight: 260 F', 'Nighttime: -280 F']

Dit type splitsing is handig wanneer u een lus nodig hebt om informatie te verwerken of te extraheren, of wanneer u gegevens uit een tekstbestand laadt.

Een tekenreeks zoeken

Sommige tekenreeksmethoden kunnen zoeken naar inhoud voordat ze worden verwerkt, zonder een lus te gebruiken. Stel dat u twee zinnen hebt die temperaturen bespreken op verschillende planeten en manen. U bent echter alleen geïnteresseerd in temperaturen die zijn gerelateerd aan onze maan. Als de zinnen niet over de maan praten, moeten ze dus niet worden verwerkt om informatie te extraheren.

De eenvoudigste manier om te ontdekken of een bepaald woord, teken of een groep tekens in een tekenreeks bestaat, is door de in operator te gebruiken:

print("Moon" in "This text will describe facts and challenges with space travel")

Output: False

print("Moon" in "This text will describe facts about the Moon")

Output: True

Een methode voor het vinden van de positie van een specifiek woord in een tekenreeks is het gebruik van de .find() methode:

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Moon"))

Output: -1

De .find() methode retourneert een -1 wanneer het woord niet wordt gevonden of retourneert de index (het getal dat de plaats in de tekenreeks vertegenwoordigt). Dit is hoe het zich zou gedragen als u zoekt naar het woord Mars:

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Mars"))

Output: 64

64 is de positie waar "Mars" deze wordt weergegeven in de tekenreeks.

Een andere manier om naar inhoud te zoeken, is door de .count() methode te gebruiken, die het totale aantal exemplaren van een bepaald woord in een tekenreeks retourneert:

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.count("Mars"))
print(temperatures.count("Moon"))
1
0

Tekenreeksen in Python zijn hoofdlettergevoelig, wat betekent dat maan en maan worden beschouwd als verschillende woorden. Als u een niet-hoofdlettergevoelige vergelijking wilt uitvoeren, kunt u een tekenreeks converteren naar alle kleine letters met behulp van de .lower() methode:

print("The Moon And The Earth".lower())

Output: the moon and the earth

Net als bij de .lower() methode hebben tekenreeksen een .upper() methode die het tegenovergestelde doet, waarbij elk teken wordt geconverteerd naar hoofdletters:

print("The Moon And The Earth".upper())

Output: THE MOON AND THE EARTH

Tip

Wanneer u inhoud zoekt en controleert, is een robuustere benadering om een tekenreeks in kleine letters te gebruiken, zodat hoofdletters geen overeenkomst voorkomen. Als u bijvoorbeeld het aantal keren telt dat het woord wordt weergegeven, wordt de methode niet geteld wanneer de weergave wordt weergegeven, ook al zijn ze beide hetzelfde woord. U kunt de .lower() methode gebruiken om alle tekens te wijzigen in kleine letters.

Inhoud controleren

Er zijn momenten waarop u tekst verwerkt om informatie te extraheren die onregelmatig is in de presentatie. De volgende tekenreeks is bijvoorbeeld eenvoudiger te verwerken dan een ongestructureerde alinea:

temperatures = "Mars Average Temperature: -60 C"

Als u de gemiddelde temperatuur op Mars wilt extraheren, kunt u het goed doen met de volgende methoden:

temperatures = "Mars Average Temperature: -60 C"
parts = temperatures.split(':')
print(parts)
print(parts[-1])
['Mars average temperature', ' -60 C']
' -60 C'

De voorgaande code vertrouwt erop dat alles na de dubbele punt (:) een temperatuur is. De tekenreeks wordt gesplitst op :, waarmee een lijst met twee items wordt gegenereerd. Als [-1] u de lijst gebruikt, wordt het laatste item geretourneerd. Dit is de temperatuur in dit voorbeeld.

Als de tekst onregelmatig is, kunt u niet dezelfde splitsmethoden gebruiken om de waarde op te halen. U moet de items doorlopen en controleren of de waarden van een bepaald type zijn. Python heeft methoden waarmee u het type tekenreeks kunt controleren:

mars_temperature = "The highest temperature on Mars is about 30 C"
for item in mars_temperature.split():
    if item.isnumeric():
        print(item)

Output: 30

Net als bij de .isnumeric() methode .isdecimal() kunt u controleren op tekenreeksen die eruitzien als decimalen.

Belangrijk

Het kan verrassend zijn om te leren dat "-70".isnumeric() zou terugkeren False. Dit komt doordat alle tekens in de tekenreeks numeriek moeten zijn en het streepje (-) niet numeriek is. Als u negatieve getallen in een tekenreeks wilt controleren, werkt de .isnumeric() methode niet.

Er zijn extra validaties die u kunt toepassen op tekenreeksen om te controleren op waarden. Voor negatieve getallen wordt het streepje voorafgegaan door het getal en dat kan worden gedetecteerd met de .startswith() methode:

print("-60".startswith('-'))

Output: True

Op dezelfde manier helpt de .endswith() methode bij het verifiëren van het laatste teken van een tekenreeks:

if "30 C".endswith("C"):
print("This temperature is in Celsius")

Output: This temperature is in Celsius

Tekst transformeren

Er zijn andere methoden die helpen in situaties waarin tekst moet worden omgezet in iets anders. Tot nu toe hebt u tekenreeksen gezien die C kunnen gebruiken voor Celsius en F voor Fahrenheit. U kunt de .replace() methode gebruiken om exemplaren van een teken of groep tekens te zoeken en vervangen:

print("Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C"))

Output: Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.

Zoals eerder vermeld, .lower() is een goede manier om tekst te normaliseren om een hoofdlettergevoelige zoekopdracht uit te voeren. Laten we snel controleren of bepaalde tekst temperaturen bespreekt:

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text)

Output: False

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text.lower())

Output: True

Het is mogelijk dat u niet altijd hoofdlettergevoelige verificatie hoeft uit te voeren, maar elke letter kleiner maken is een goede benadering wanneer de tekst gemengde behuizing gebruikt.

Nadat u de tekst hebt gesplitst en de transformaties hebt uitgevoerd, moet u mogelijk alle onderdelen weer samenbrengen. Net zoals de .split() methode tekens kan scheiden, kan de .join() methode ze weer samenbrengen.

Voor de .join() methode is een iterable (zoals een Python-lijst) als argument vereist, zodat het gebruik er anders uitziet dan andere tekenreeksmethoden:

moon_facts = ["The Moon is drifting away from the Earth.", "On average, the Moon is moving about 4cm every year."]
print(' '.join(moon_facts))

Output: The Moon is drifting away from the Earth. On average, the Moon is moving about 4cm every year.

In dit voorbeeld ' ' wordt gebruikt om elk item in de lijst samen te voegen.