Python strings
Op deze pagina:
- Een gedeelte van een string opvragen (slicing)
- Controleren of een variabele een string is
- Een string splitsen naar een lijst (list)
- Escape tekens gebruiken
- Een string die uit meerdere regels bestaat
- Spaties verwijderen aan het begin en einde van een string met strip()
- Een list (lijst) omzetten naar een string met .join
- Een list (lijst) omzetten naar een string via print
- Substrings in een string vervangen met replace()
- Substrings vinden met find
- De laatste substring vinden met rfind
- Nagaan of een string begint (prefix) of eindigt (suffix) met een bepaalde substring
- Een prefix of suffix van een string verwijderen
- Byte String
- Meervoudig strings genereren
- Controleren of een string leeg is
- Een set omzetten naar een string
- Een string achterstevoren zetten
- Hoe vaak komt een karakter voor in een string
- Een string kopiëren
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