Tekenreeksmethoden in Python

Voltooid

Tekenreeksen zijn een van de meest voorkomende methodetypen in Python. U moet ze vaak bewerken om informatie te extraheren of in een bepaalde indeling te passen. 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() kan bijvoorbeeld rechtstreeks met een tekenreeks worden gebruikt:

>>> "temperatures and facts about the moon".title()
'Temperatures And Facts About The Moon'

En hetzelfde gedrag en hetzelfde gebruik gebeurt op een variabele:

>>> heading = "temperatures and facts about the moon"
>>> heading.title()
'Temperatures And Facts About The Moon'

Een tekenreeks splitsen

Een veelgebruikte tekenreeksmethode is .split(). Zonder argumenten scheidt de methode de tekenreeks in 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 .split()
['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, waardoor één regel wordt gemaakt:

>>> temperatures .split('\n')
['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 of een andere resource laadt.

Een tekenreeks zoeken

Afgezien van het gebruik van een lus, kunnen sommige tekenreeksmethoden zoeken naar inhoud voordat ze worden verwerkt, zonder dat er een lus nodig is. Stel dat u twee zinnen hebt die temperaturen bespreken op verschillende planeten en manen, maar u bent alleen geïnteresseerd in temperaturen die betrekking hebben op 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 bepaalde groep tekens in een tekenreeks bestaat, is zonder een methode te gebruiken:

>>> "Moon" in "This text will describe facts and challenges with space travel"
False
>>> "Moon" in "This text will describe facts about the Moon"
True

Een benadering 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."""
>>> temperatures.find("Moon")
-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 op zoek bent naar het woord Mars:

>>> temperatures.find("Mars")
65

65 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, waarmee het totale aantal exemplaren van een bepaald woord in een tekenreeks wordt geretourneerd:

>>> temperatures.count("Mars")
1
>>> temperatures.count("Moon")
0

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

>>> "The Moon And The Earth".lower()
'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:

>>> "The Moon And The Earth".upper()
'THE MOON AND THE EARTH'

Tip

Wanneer u inhoud zoekt en controleert, is een robuustere benadering een tekenreeks in kleine letters, zodat casing geen overeenkomst voorkomt. Als u bijvoorbeeld het aantal keren telt dat het woord wordt weergegeven, wordt de methode niet geteld wanneer het wordt weergegeven, ook al zijn het beide woorden. 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"

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

>>> parts = temperatures.split(':')
>>> parts
['Mars average temperature', ' -60 C']
>>> parts[-1]
' -60 C'

De voorgaande methoden vertrouwen blindelings dat alles na de dubbele punt (:) een temperatuur is. De tekenreeks wordt gesplitst op :, waarmee een lijst met twee items wordt geproduceerd. Als [-1] u in 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)
...
30

Net als bij de .isnumeric() methode kunt .isdecimal() 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:

>>> "-60".startswith('-')
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")
'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 te vervangen:

>>> "Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C")
'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."
>>> "temperatures" in text
False
>>> "temperatures" in text.lower()
True

Mogelijk hoeft u niet altijd hoofdlettergevoelige verificatie 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 opnieuw samenvoegen. Net zoals de .split() methode tekens kan scheiden, kan de .join() methode deze weer samenbrengen.

De .join() methode vereist een iterable (zoals een Python-lijst) als argument, dus het gebruik ziet er anders uit dan andere tekenreeksmethoden:

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

In dit voorbeeld wordt het nieuwe regelteken '\n' gebruikt om elk item in de lijst samen te voegen.