Python strings

Op deze pagina:

Een string kan tussen single quotes staan of tussen double quotes, welke je gebruikt zal afhankelijk zijn van de vraag of er in de string zelf nog single of double quotes voorkomen.

Je kunt een string op het scherm zetten met print(). Twee strings aan elkaar plakken kan met het plusteken:


print("Hallo"+" wereld")

Je moet dan zelf de spaties toevoegen en alles wat je met een plusteken aan elkaar plakt moet een string zijn.

Je kunt in de printfunctie de dingen die je op het scherm wilt zetten scheiden door komma's. Python voegt dan zelf spaties toe. Niet alles wat je in een printstatement zet hoeft dan een string te zijn als je komma's gebruikt:


>>> print('over',2,'dagen')
over 2 dagen

>>> print('over'+' '+'2'+' '+'dagen')
over 2 dagen

Je kunt een string maken door meerdere strings achter elkaar toe te wijzen (voeg wel zelf de spaties toe):


mijnstring = "Hallo " "wereld " "hier ben ik " "dan"
print(mijnstring)

# resultaat:
Hallo wereld hier ben ik dan

Je kunt een string ook vermenigvuldigen met een geheel getal (een integer). Het resultaat is dan dat deze string een aantal maal achter elkaar geplakt wordt:


mijnstring = 'hallo'
mijn3string = mijnstring*3
print(mijn3string)

# resultaat:
hallohallohallo

Als je een string met nul of een negatief getal vermenigvuldigd, dan krijg je een lege string.

Strings zijn immutable, dus je verwacht misschien niet dat je =+ mag gebruiken, maar dat mag toch:


woord = "Py"
woord += "tho"
woord += "nis"
woord += "ta"
print(woord)

# resultaat:
Pythonista

Strings zijn immutable, je kunt een string alleen aanpassen door een nieuwe toewijzing, niet via de functies die op bijvoorbeeld lists gebruikt worden zoals append(), pop() of insert(). Je kunt de lengte van een string krijgen via len() en je kunt ook de index gebruiken op te zien wat er op een bepaalde positie in een string staat. Indexen beginnen bij 0.

Bijvoorbeeld:


mijnstring = "Python leren is leuk"

print(len(mijnstring))
# resultaat: 20

print(mijnstring[1])
# resultaat: y

Een gedeelte van een string opvragen (slicing)

Je kunt een gedeelte van een string opvragen. Het snijden van een string gaat met de dubbele punt notering: [start:stop:stap]. Met [start:stop] is de stap automatisch 1. Zonder cijfers krijg je de hele string: [::].


mijnstring = "abcdefgh"
print(mijnstring[3:6])

# resultaat:
def

print(mijnstring[3:6:1])

# resultaat:
def

print(mijnstring[3:6:2])

# resultaat:
df

print(mijnstring[::])

# resultaat:
abcdefgh

print(mijnstring[0:len(mijnstring):1])

# resultaat:
abcdefgh

print(mijnstring[::-1])

# resultaat:
hgfedcba

print(mijnstring[-1:-(len(mijnstring)+1):-1])

# resultaat:
hgfedcba

print(mijnstring[4:1:-2])

# resultaat:
ec

Een letter vervangen in een string gaat niet omdat strings immutable zijn:


mijnstring[4] = "p"

Geeft:


TypeError: 'str' object does not support item assignment

Controleren of een variabele een string is

Je kunt controleren of een variabele een string is via de type() functie, geef de variabele als argument en vergelijk het resultaat met de str class:


getal = "Vijf"
print(type(getal) == str)  # True

Je kunt ook isinstance() gebruiken met twee argumenten: de variabele en de str class:


getal = "Vijf"
print(isinstance(getal, str))  # True

Een string splitsen naar een lijst (list)

Een string opsplisten kan met split(). Standaard is de spatie het scheidingsteken, maar andere tekens kunnen ook als scheidingsteken gebruikt worden.

Als je string hebt waar spaties in staan, dan kun je van de string een list maken door de string te splitsen op spaties met:


mijnstring = "Python leren is leuk"
mijnlist = mijnstring.split()
print(mijnlist)

Het resultaat:


['Python', 'leren', 'is', 'leuk']

Deze methode, dus split() zonder argument, verwijdert ook eventuele spaties die aan het begin en/of einde van de string staan.

Als je een string splitst die geen spaties bevat, dan krijg je een list met slechts 1 element: de hele string.

Je kunt een string splitsen met een ander teken als scheidingsteken, bijvoorbeeld een komma:


mijnstring = "Python,leren,is,leuk"
mijnlist = mijnstring.split(",")
print(mijnlist)

Het resultaat:


['Python', 'leren', 'is', 'leuk']

Als je alleen de eerste woorden uit een string wilt hebben, dan kun je maxsplit as argument meegeven:


regel = "Fietsbel|24,50|per stuk"
artikel, overige_info = regel.split("|", maxsplit=1)
print(artikel)

# resultaat:
Fietsbel

Als je een string hebt waar nieuwe regeltekens in voorkomen en je deze string wilt splitsen op die nieuwe regeltekens, dan kan dat met split('\n') als je zeker weet dat dit de manier is waarop nieuwe regels in de string worden aangegeven. Je kunt echter ook strings hebben die '\r\n' of alleen '\r' in plaats van '\n' voor het aangeven van nieuwe regels bevatten. In de gevallen dat je niet van te voren weet wat voor karakters er voor nieuwe regels gebruikt worden, kun je de splitlines() methode gebruiken.


mijnstring = 'Dit is de eertse regel.\r\nEn dit is de tweede regel.'
regels = mijnstring.splitlines()
print(regels)

# resultaat:
['Dit is de eertse regel.', 'En dit is de tweede regel.']

Escape tekens gebruiken

De backslash "\" kan gebruikt worden om tekens, zoals aanhalingstekens, te 'escapen':


"\"Dit is een quote\""

Ook kan de backslash gebruikt worden om bijvoorbeeld een regelbreak in een string te zetten via \n:


"Hier begint het \n en dit gaat verder op de volgende regel"

Een tab kan ook via \t.

Een overzicht van de escape-tekens:

\'
Enkel aanhalingsteken
\"
Dubbel aanhalingsteken
\t
Tab
\n
Nieuwe regel
\\
Backslash

Als je toch backslashes wilt gebruiken, zonder deze te hoeven 'escapen', dan kan je gebruik maken van een raw-string door een r te plaatsen voor de string:


print(r'Het staat op C:\test in het bestand test.py.')

De backslash zal nu gewoon te zien zijn, er wordt geen tab getoond in dit geval.

Een string die uit meerdere regels bestaat

Een print statement kan uit meerdere regels bestaan door de string tussen 3 (double of single) quotes te plaatsen (enkele en dubbele aanhalingstekens hoeven in zo'n meerregelige string niet escaped te worden):


print("""\
dit komt op de 'eerste' regel
dit komt op de "tweede" regel
dit komt op de derde regel
""")

De mooie uitlijning wordt hier bereikt met een enkele backslash die ervoor zorgt dat de nieuwe regel wordt genegeert en er geen extra nieuwe regel wordt toevoegd aan het begin van de string.

Spaties verwijderen aan het begin en einde van een string met strip()

Met de strip() methode kun je spaties (inclusief tabs en nieuwe regeltekens) aan het begin en einde van een string verwijderen.


mijnstring = '   hier begint de tekst   '
opgeschoonde_string = mijnstring.strip()
print(opgeschoonde_string)

# resultaat:
hier begint de tekst

Als je alleen spaties (inclusief tabs en nieuwe regeltekens) aan het begin van een string wilt verwijderen, dan kun je lstrip() gebruiken en als je alleen spaties (inclusief tabs en nieuwe regeltekens) aan het einde van een string wilt verwijderen, dan kun je rstrip() gebruiken.

Allen nieuwe regeltekens aan het einde van een string verwijderen:


regel.rstrip("\n")

Een list (lijst) omzetten naar een string met .join

Een list met strings kan je omzetten naar een enkele string met .join:


list1 = ['1', '2', '3']
str1 = ''.join(list1)

Als er numerieke waarden in de list staan, dan moeten die eerst worden omgezet naar strings:


list1 = [1, 2, 3]
str1 = ''.join(str(e) for e in list1)

dit geeft


'123'

Je kunt er ook komma's tussen plaatsen:


list1 = [1, 2, 3]
str1 = ','.join(str(e) for e in list1)

Dit geeft:


'1,2,3'

Een list (lijst) omzetten naar een string via print

Je kunt via print een list uitpakken:


woorden = ["hallo", "wereld", "hier", "ben", "ik", "dan"]
print(*woorden)

# resultaat:
hallo wereld hier ben ik dan

Substrings in een string vervangen met replace()

Via replace() krijg je een kopie van de originele string waarin een alle substrings zijn vervangen door een andere substring.

Het gebruik van replace() is: str.replace(oud, nieuw [, max])

Hierin is:

  • oud - de oude substring die je wil vervangen
  • nieuw - de nieuwe substring die de oude gaat vervangen
  • max (optioneel) - het maximum aantal keer dat je de oude substring wil vervangen door de nieuwe substring

Als je geen max opgeeft, dan worden alle oude substrings vervangen door nieuwe substrings.

Substrings vinden met find

De String find() method geeft de index van de eerste keer dat de substring in een string gevonden wordt. Als de substring niet wordt gevonden, dan geeft de find() -1 terug.

De syntax:


str.find(sub, start, end)

De parameters:

sub
de substring waarnaar gezocht moet worden in de string (verplicht).
start
de startpositie vanaf waar gezocht moet worden in de string (optioneel).
end
de eindpositie, tot waar gezocht moet worden in de string (optioneel).

Indien start en end niet worden opgegeven, dan is start 0 en end is dan gelijk aan de lengte van de string -1 (want de index begint met 0 te tellen).

De method index() lijkt op de method find(). Het verschil is dat index() een fout geeft als de substring niet wordt gevonden.

De laatste substring vinden met rfind

Met rfind() kun je vinden waar een substring het laatst voorkomt in een string.


tekst = "woensdag, donderdag en vrijdag"
dag = tekst.rfind("dag")
print(dag)

#resultaat
27

De rfind() method geeft -1 terug als de substring niet in de string voorkomt.

De parameters:

sub
de substring waarnaar gezocht moet worden in de string (verplicht).
start
de startpositie vanaf waar gezocht moet worden in de string (optioneel).
end
de eindpositie, tot waar gezocht moet worden in de string (optioneel).

De rfind() method lijkt erg op de rindex() method, het verschil is dat als de substring niet wordt gevonden in de string, dan zal rfind() de waarde -1 teruggeven en rindex() zal een exception (fout) geven.

Nagaan of een string begint (prefix) of eindigt (suffix) met een bepaalde substring

Met de string startswith method kun je nagaan of een string de prefix van een andere string is:


mijnstring = '010-123456789'
print(mijnstring.startswith('010'))

# resultaat:
True

Met de string endswith method kun je nagaan of een string de suffix van een andere string is:


mijnstring = 'plaatje.jpg'
print(mijnstring.endswith('.jpg'))

# resultaat:
True

Zowel startswith als endswith kunnen ook een tuple met strings als argument verwerken:


bestanden = ['plaatje1.png', 'plaatje2.jpg', 'tekst.txt']
for bestand in bestanden:
    print(bestand,' is een afbeelding: ', bestand.endswith(('jpg','png')))

# resultaat:
plaatje1.png  is een afbeelding:  True
plaatje2.jpg  is een afbeelding:  True
tekst.txt  is een afbeelding:  False

Een prefix of suffix van een string verwijderen

De removeprefix() method zal een prefix aan het begin van een string verwijderen indien deze aanwezig is.


mijnstring = '010-123456789'
string2 = mijnstring.removeprefix('010-')
print(string2)

# resultaat (vanaf Python 3.10):
123456789

De removesuffix() method zal een suffix aan het einde van een string verwijderen indien deze aanwezig is.


mijnstring = '010-123456789'
string2 = mijnstring.removesuffix('-123456789')
print(string2)

# resultaat (vanaf Python 3.10):
010

Byte String

Met een b voor een string wordt de string een "byte string".

Voorbeeld:


b_str = b'Dit is een byte String'

Het verschil is dat een byte string wordt opgeslagen als bytes en een gewone string wordt opgeslagen als karakters. Een gewone string is voor mensen leesbaar, een byte string niet.


var = 'Dit is een String'.encode('ASCII')
print(var)
print(type(var))

# resultaat:
b'Dit is een String'
<class 'bytes'>

b_var = b'Dit is een String'.decode('ASCII')
print(b_var)
print(type(b_var))

3 resultaat:
Dit is een String
<class 'str'>

Meervoudig strings genereren

Stel je hebt een string waar je meerdere meogleijkheden in hebt staan die tussen gekrulde haken staan, zoals:

In de {kamer, keuken} staat {een stoel, een tafel, een lamp} in de hoek.

Je wilt alle mogelijkheden hiervan krijgen als volgt:

Om dit te bereiken ken je de volgende functie gebruken:


from collections.abc import Iterable
import re
import itertools

def uitbreiden(patroon: str) -> Iterable[str]:
    """
    De strings die tussen gekrulde haken staan uitbreiden.
    """
    deelkeuzen = []
    for deel in re.split(r"(\{.*?\})", patroon):
        if deel.startswith("{"):
            deelkeuzen.append(deel.strip("{}").split(","))
        else:
            deelkeuzen.append([deel])
    for delen in itertools.product(*deelkeuzen):
        yield "".join(delen)

tekst = "In de {kamer,keuken} staat {een stoel,een tafel,een lamp} voor de deur."

regels = list(uitbreiden(tekst))
for regel in regels:
    print(regel)

# resultaat:
In de kamer staat een stoel voor de deur.
In de kamer staat een tafel voor de deur.
In de kamer staat een lamp voor de deur.
In de keuken staat een stoel voor de deur.
In de keuken staat een tafel voor de deur.
In de keuken staat een lamp voor de deur.

Controleren of een string leeg is

Hoe leeg moet een string zijn? Een string kan echt helemaal leeg zijn, maar een string kan ook alleen spaties bevatten, zo'n string zou je ook als leeg kunnen zien.

Controleren of een string helemaal leeg is:


# not
mijnstring = ""
if (not mijnstring):
    print("String is leeg")
else:
    print("String is niet leeg")

# len
mijnstring = ""
if len(mijnstring) == 0:
    print("String is leeg")
else:
    print("String is niet leeg")

# ==
mijnstring = ""
if mijnstring == "":
    print("String is leeg")
else:
    print("String is niet leeg")

Controleren of een string leeg is, spaties niet meegeteld:


# strip
mijnstring = " "
if mijnstring.strip() == "":
    print("String is leeg")
else:
    print("String is niet leeg")

Een set omzetten naar een string

het is mogelijk om een set bestaande uit losse strings om te zetten naar een (lange) string, je hebt echter geen controle over de volgorde van de elementen van een set. de string zal daarom de elementen uit de set in een onverwachte volgorde kunnen bevatten.


mijnset = {"Dit","is","een",'voorbeeld',"met","Python"}
# Conversie
mijnstring = " ".join(item for item in mijnset)

print(mijnstring)
print(len(mijnstring))

# resultaat:
voorbeeld is Dit met een Python
31

Een string achterstevoren zetten

Je kunt allerlei manieren bedenken om een string om te draaien, maar de eenvoudigste is deze:


string = "Python is leuk"
omgekeerde_string = string[::-1]
print(omgekeerde_string)

# resultaat:
kuel si nohtyP

Hoe vaak komt een karakter voor in een string

Om te zien hoe vaak een karakter voorkomt in eens tring kun je de Counter functie gebruiken:


from collections import Counter

mijnstring = "Python in een ton"
telling = dict(Counter(mijnstring))
print(telling)

# resultaat:
{'P': 1, 'y': 1, 't': 2, 'h': 1, 'o': 2, 'n': 4, ' ': 3, 'i': 1, 'e': 2}

Een string kopiëren

De snelste manier om een kopie te maken van een string is door deze toe te wijzen aan een nieuwe variabele:


string1 = "Dit is mijn string"
string2 = string1
string2 += ' met extra tekst'
print('string1: ',string1)
print('string2: ',string2)

# resultaat:
string1:  Dit is mijn string
string2:  Dit is mijn string met extra tekst

 

Verwante artikelen