← Python/Tekst begrijpen en verwerken
Les 2 van 8
MODULE 05 · 02◷ 26 min

Verdeel tekst en verbind de onderdelen

Na deze les kun je
  • Witruimte en expliciete veldgrenzen onderscheiden
  • Lege velden en tekst na de eerste grens behouden
  • Een lijst strings met een scheidingsteken verbinden

Een reservering komt binnen als één regel tekst, terwijl je programma losse bestemmingen nodig heeft. Later wil je die bestemmingen weer als een nette zin tonen. Je gaat daarom van tekst naar een lijst en met een gekozen scheidingsteken weer terug.

Waar begint het volgende onderdeel?

Een scheidingsteken markeert de grens tussen onderdelen. Met text.split(";") gebruik je een puntkomma als grens. Het resultaat is een lijst met strings: ieder gevonden onderdeel blijft tekst, ook wanneer het alleen cijfers bevat.

Een leeg onderdeel kan betekenis hebben. Bij "naam;;plaats" ontbreekt het middelste veld, dus de lijst bevat daar een lege string. Een puntkomma aan het einde maakt eveneens een leeg laatste veld; Python gooit die informatie niet weg.

Zonder argument werkt split() anders. Dan vormen opeenvolgende spaties, tabs en regeleinden samen een grens en verdwijnen lege delen aan de buitenkant. Zulke onzichtbare tekens noemen we witruimte.

KeuzeWat blijft er over?
split()Woorden, zonder lege stukken door witruimte
split(";")Velden, inclusief ontbrekende waarden
split("=", 1)Hoogstens twee delen, na de eerste grens

Die laatste één is het maximale aantal splitsingen. De rest blijft bij het tweede deel, ook wanneer daarin nog een gelijkteken staat. Staat er geen gelijkteken, dan bevat de lijst alleen de oorspronkelijke tekst.

Losse onderdelen weer verbinden

Met join verbind je strings uit een lijst. Het scheidingsteken staat vóór de punt: " / ".join(names) zet precies die tekst tussen twee opeenvolgende namen. Bij één naam is er geen tussenruimte nodig; bij een lege lijst is het resultaat leeg.

Voorspel de lijsten en de samengestelde regel in dit zelfstandige voorbeeld. Kijk vooral naar het verschil tussen woorden scheiden en lege velden behouden.

Van vervoermiddelen naar tekst
note = "  fiets  trein\tbus "
print(note.split())
print("A;;C;".split(";"))
names = ["Noord", "Zuid"]
print(" / ".join(names))
print("route=pad=bos".split("=", 1))
Verwachte uitvoer
['fiets', 'trein', 'bus']
['A', '', 'C', '']
Noord / Zuid
['route', 'pad=bos']

De dubbele punt en schuine streep in de uitvoer komen niet vanzelf uit de lijst. De string waarop je join aanroept bepaalt wat ertussen verschijnt. Zo kun je dezelfde onderdelen op verschillende manieren tonen zonder de oorspronkelijke lijst te veranderen.

Veelgemaakte fout: join op de lijst zoeken

Het voelt misschien logisch om een lijst te vragen zichzelf samen te voegen. In Python hoort deze methode echter bij de string die als scheidingsteken dient. Voer de foutvariant uit en lees welk object de methode niet heeft.

De methode bij het verkeerde object
places = ["Haarlem", "Zwolle"]
print(places.join(" / "))
Verwachte fout
AttributeError: 'list' object has no attribute 'join'

Je krijgt AttributeError: een lijst heeft geen methode met die naam. De reparatie is de volgorde omdraaien, bijvoorbeeld " / ".join(places). Alle onderdelen moeten daarbij strings zijn; getallen moet je eerst bewust naar tekst omzetten.

Kies wat je wilt behouden

De functies in de opdrachten krijgen steeds strings of een lijst met strings. words gebruikt witruimte als grens, terwijl fields ieder puntkommaveld moet behouden. Een ontbrekend veld is iets anders dan een woord dat niet bestaat.

first_pair splitst alleen het eerste gelijkteken. Zij geeft ook bij ontbrekende of lege tekst gewoon de lijst van split terug. join_labels gebruikt precies het meegegeven scheidingsteken, inclusief eventuele spaties.

AAN DE SLAG 0/4
1

Scheid woorden op witruimte

Laat words de woorden als lijst teruggeven, met opeenvolgende witruimte als één grens en zonder lege buitenste delen.

2

Behoud ontbrekende velden

Laat fields op iedere puntkomma splitsen en lege velden op hun oorspronkelijke positie behouden.

3

Gebruik precies het scheidingsteken

Laat join_labels de lijst strings verbinden met precies separator tussen opeenvolgende onderdelen. Verander de invoerlijst niet.

4

Splits alleen de eerste grens

Laat first_pair op hoogstens het eerste gelijkteken splitsen. Behoud ieder later gelijkteken in het tweede deel.

Wat je meeneemt

  • Met een expliciet scheidingsteken blijven lege velden behouden.
  • Zonder scheidingsteken behandelt split opeenvolgende witruimte als één grens.
  • De scheidingstekenstring voert join uit; een maximum beperkt het aantal splitsingen.

Hierna zoek je in tekst en verwijder je alleen een werkelijk aanwezig voorvoegsel.

main.py
UitvoerPython
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.