Les chaînes de caractères

Les données alphanumériques

Le terme "chaîne de caractères" ou "string" en anglais signifie une suite finie de caractères qui ne sont pas seulement des lettres mais ils peuvent être des nombres, <, un espace, @,*,%, etc,.. . En langage Python, cette suite de caractères est comprise entre deux quotes doubles (guillemets) ou quotes simples (apostrophes), ces deux symboles sont interchangeables.

Les chaînes de caractères permettent de manipuler des mots, des phrases, des messages.

L’exemple suivant montre comment créer une chaîne de caractères.

t = "string@texte"
print( type (t), t)
t = 'string = texte, initialisation avec apostrophes'
print(type (t), t)
t = "morceau 1" \
"morceau 2" 				
print (t)                       	# il ne doit rien y avoir après le symbole \,
                                	# pas d’espace ni de commentaire	
t = """première ligne 			
        seconde ligne""" 	# chaîne de caractères qui s’étend sur deux lignes
print (t)

Le résultat de ce petit programme est le suivant :

 string@texte
 string = texte, initialisation avec apostrophes
morceau 1morceau 2
première ligne
   seconde ligne

La troisième chaîne de caractères créée lors de ce programme s’étend sur deux lignes. Il est parfois plus commode d’écrire du texte sur deux lignes plutôt que de le laisser caché par les limites de fenêtres d’affichage. Python offre la possibilité de couper le texte en deux chaînes de caractères recollées à l’aide du symbole \ à condition que ce symbole soit le dernier de la ligne sur laquelle il apparaît. De même, lorsque le texte contient plusieurs lignes, il suffit de les encadrer entre deux symboles """ ou """ pour que l’interpréteur Python considère l’ensemble comme une chaîne de caractères et non comme une série d’instructions.

Remarque

Pour insérer un guillemet dans une chaîne de caractères encadrée elle-même par des guillemets, il faut le faire précéder du symbole \. La séquence \" est appelée un extra-caractère (voir tableau ci-dessous). Liste des extra-caractères les plus couramment utilisés à l’intérieur d’une chaîne de caractères :

\" guillemet
\' apostrophe
\n passage à la ligne
\\ insertion du symbole \
\% pourcentage, ce symbole est aussi un caractère spécial
\t tabulation
\r retour à la ligne, peu usité, il a surtout son importance lorsqu'on passe d'un système Windows à Lunix car Windows l'ajoute automatiquement à tous ses fichiers textes.

Remarque : Préfixe "r", chaîne de caractères

Il peut être fastidieux d’avoir à doubler tous les symboles \ d’un nom de fichier. Il est plus simple dans ce cas de préfixer la chaîne de caractères par r de façon à éviter que l’utilisation du symbole \ ne désigne un caractère spécial. Les deux lignes suivantes sont équivalentes :

s = "C:\\Users\\Lycee\\exemple.txt"
s = r"C:\Users\Lycee\exemple.txt"

Sans la lettre "r", tous les \ doivent être doublés, dans le cas contraire, Python peut avoir des effets indésirables selon le caractère qui suit ce symbole.

Le type des chaînes de caractères

En langage python, une chaîne de caractères est un objet de type str (abréviation de string).


ch="Ceci est un objet de type string"
print(type(ch))

L'affichage obtenu :

 ‹ class 'str' › 

Concaténation de chaînes de caractères.

Concaténation avec +

Lorsqu'on cherche à coller deux chaînes de caractères entre elles, on parle de concaténation de chaînes. Le programme ci-dessous vous donne un exemple de l'utilisation de la concaténation.

 
nom=input("Entrez votre nom : ")
texte_bienvenue="Bonjour "+nom+"."
print(texte_bienvenue) 

Si l'on suppose que l'utilisateur a entré le nom Dupont, l'affichage obtenu est :

 Bonjour Dupont.

Après l'addition, la multiplication.

Avec les nombres, l'opération 4+4+4+4+4+4 se note plus brièvement 4*6. Il en va de même avec les chaînes de caractères en langage python.

 
t='cou'
print(t*6)

L'affichage obtenu est :

 coucoucoucoucoucou

Retour sur le typage

Un même opérateur a des effets différents suivant le type des objets auxquels il s'applique.

 
print(5+2)
print('5'+'2')

L'affichage obtenu est :

7
52 
  1. Dans le premier cas, python ajoute les entiers 5 et 2 et obtient 7.
  2. Dans le second cas, python concatène les chaînes de caractères '5' et '2' et obtient donc '52'.

Changer de type

Dans certains contextes, il est utile de pouvoir changer le type d'une variable en un autre type (lorsque c'est possible).

Du type string vers le type int.

Par exemple, lorqu'on utilise un input dans un programme. Le résultat sera toujours une chaîne de caractères, même si l'on attend un entier.

 
t=input("Entrez l'année de votre date de naissance : ")
print(type(t))

En supposant que l'utilisateur ait entré 1998, l'affichage obtenu est :

<class 'str'>

ch contient donc maintenant une chaîne de caractères. Cela peut bien sûr être gênant si l'on veut ensuite effectuer un calcul avec l'entier demandé.

On essaie par exemple ici de déterminer l'âge de l'utilisateur :

 
ch=input("Entrez l'année de votre date de naissance : ")
age=2018-ch

L'exécution de ce code conduit à une erreur :

 TypeError: unsupported operand type(s) for -: 'int' and 'str' 

On ne peut pas soustraire un entier et une chaîne de caractères.

Pour régler ce problème, il nous suffit de transformer la chaîne lue en entier avec la fonction int().

 
t=input("Entrez l'année de votre date de naissance : ")
t=int(t) # transformation de t en entier
age=2018-t
print("Vous avez ", age, "ans")

Si l'utilisateur entre bien un entier, ce programme se déroulera comme attendu.

Du type int vers le type string.

Il peut arriver à l'inverse que l'on veuille transformer un objet de type entier en un objet de type string. On utilisera pour cela la fonction str().

 
age=18
print("Type de la variable age avant le cast : ", type(age) )
 
age=str(age)
print("Type de la variable age après le cast : ", type(age) )

On obtient l'affichage :

Type de la variable age avant le cast :  <class 'int'>
Type de la variable age après le cast :  <class 'str'>

Longueur d'une chaîne de caractères.

La longueur d'une chaîne de caractères est le nombre de caractères dans la chaîne. Rappelons qu'une espace est un caractère comme un autre.

 
print(len("Python est un langage"))

On obtient :

21

Parcourir les éléments d'une chaîne de caractères.

Pour parcourir les caractères d'une chaîne, on peut utiliser une boucle for.

 
texte="Le langage Python."

for x in texte :
	print(x)

L'indentation (automatique avec les bons éditeurs ) pour l'intruction suivant la ligne for ... : est obligatoire. Cette indentation permettra de délimiter le bloc concerné par la boucle.

L'affichage obtenu est le suivant (à chaque nouvelle instruction print, on va à la ligne) :

L
e
 
l
a
n
g
a
g
e
 
P
y
t
h
o
n
.

Sous-chaîne d'une chaîne de caractères.

Accès à un caractère de la chaîne par son indice.

Les éléments d'une chaîne ch de longueur len(ch) sont numérotés de 0 à len(ch)-1.
Exemple : indexation des caractères de la chaîne ch="python."

Indice 0123456=len(ch)-1
Caractère python.
Caractère ch[0]ch[1]ch[2]ch[3]ch[4]ch[5]ch[6]=ch[len(ch)-1]

Cela donne une autre possibilité pour parcourir les caractères d'une chaîne :

 
ch="Le langage Python."

for j in range(0,len(ch)):
	print(ch[j])

Le résultat est le même que le parcours réalisé plus haut dans la page.
for j in range(a,b) : j prendra successivement les valeurs a, a+1, ..., b-2, b-1.

Le dernier indice d'une chaîne peut être aussi repéré par -1, le précédent par -2 ...

 
ch="Le langage Python."

print(ch[-1])
print(ch[-2])
print(ch[-3])
print(ch[-len(ch)])

ce qui donne :

.
n
o
L

On a donc cette seconde indexation :

Indice 0123456
Caractère python.
Caractère ch[-7]=ch[-len(ch)]ch[-6]ch[-5]ch[-4]ch[-3]ch[-2]ch[-1]

Accès à une sous-chaîne.

Une chaîne de caractères étant affectée à la variable ch, ch[a:b] sera la chaîne ch[a]+ch[a+1]+ch[a+2]+...+ch[b-1], a et b étant des entiers compris entre 0 et len(ch)-1.

 
ch="Langage Python."

sch="" # affectation de la chaîne vide à la variable sch

for j in range(0,4) :
	sch=sch+ch[j]
	
print(sch)	
print(ch[0:4])
print(ch[5:7])
print(ch[5]+ch[6])

On obtient :

Lang
Lang
ge
ge

a désignant une chaîne de caractères, dans l'expression d'une sous-chaîne de la forme a[i:j], il est possible d'omettre la borne gauche lorsqu'elle vaut 0, ou la borne droite lorsqu'elle vaut len(a)-1.

 
ch="Langage Python."

print(ch[:])
print(ch[:2])
print(ch[2:])
Langage Python.
La
ngage Python.

Fonctions applicables à une chaîne de caractère.

Le tableau suivant présente quelques fonctions applicables aux chaînes de caractères.

Fonction Résultat
t.count(sub , st , end)Retourne le nombre d’occurrences de la chaîne de caractères sub, les paramètres par défaut st et end permettent de réduire la recherche entre les caractères d’indice st et end exclu. Par défaut, st est nul tandis que end correspond à la fin de la chaîne de caractères.
t.find(sub, st , end)Retourne la position de la sous-chaîne de caractères sub dans la chaîne de caractères t, les paramètres par défaut st et end ont la même signification que ceux de la fonction count. Cette fonction retourne -1 si la recherche n’a pas abouti.
t.isalpha() Retourne True si tous les caractères de la chaîne t sont des lettres, False sinon.
t.isdigit() Retourne True si tous les caractères de la chaîne t sont des chiffres, False sinon.
t.replace(txt1, txt2,co)Retourne une copie de la chaîne de caractères en remplaçant toutes les occurrences de la chaîne text1 par txt2. Si le paramètre optionnel co est renseigné, alors seules les co premières occurrences seront remplacées.
t.split(sep , n)Découpe la chaîne de caractères en se servant de la chaîne sep comme délimiteur. Si le paramètre n est renseigné, au plus n coupures seront effectuées.
t.strip(s)Supprime les espaces au début et en fin de chaîne. Si le paramètre s est renseigné, la fonction strip supprime tous les caractères qui font partie de s au début et en fin de chaîne.
t.upper() Remplace les minuscules par des majuscules dans la chaîne de caractères t.
t.lower()Remplace les majuscules par des minuscules dans la chaîne de caractères t.
t.capitalize()Remplace le premier caractère par une majuscule dans la chaîne de caractères t.
t.join(words)Fait la somme d’un tableau de chaînes de caractères (une liste ou un T-uple). La chaîne de caractères sert de séparateur qui doit être ajouté entre chaque élément du tableau words.
t = "le langage python est intéressant"
t = t.upper () 			# mise en lettres majuscules
i = t.find ("PYTHON") 		# on cherche "PYTHON" dans t
print (i) 				
print (t.count ("AN")) 	
print (t.count ("AN", 9)) 

On obtient :

11
2
1

La sous-chaîne "PYTHON" se trouve à la 11-ième position dans la chaîne de caractères "LE LANGAGE PYTHON EST INTÉRESSANT".

La sous-chaîne "AN" est répétée deux fois dans la chaîne de caractères "LE LANGAGE PYTHON EST INTÉRESSANT".

A partir du 9-ième caractère de la chaîne "LE LANGAGE PYTHON EST INTÉRESSANT", la sous-chaîne "AN" n'est répétée qu'une seule fois.