Chapitre 7 : Aperçu de quelques méthodes associées aux objets de type chaîne de caractères (str)

En Python, tout est objet. Les chaînes de caractères sont par exemple des objets créés par instanciation de la classe str. Une classe, c’est un peu comme une caisse à outils qui permet de créer un objet et de le façonner. La classe contient des méthodes et des variables que l’on pourrait comparer aux outils d’un menuisier :

  • La méthode scie-sauteuse permet de scier des variables en contreplaqué.
  • La méthode perçeuse permet de faire des trous de différents diamètres dans la variable sus-mentionnée.
  • La méthode visseuse permet d’assembler les variables en contreplaqué grâce à différentes variables de quincaillerie (vis, équerres, etc…)

C’est pas plus compliqué que ça! Programmer, c’est fabriquer des objets dans un atelier digital.

Je créé l’objet prenom par instanciation de la classe str() et je lui affecte une chaîne de caractères.

prenom = "Gargamel"

gargamel.png

À cet objet dénommé prenom, je peux désormais appliquer différentes méthodes qui sont en fait des fonctions définies dans une classe. Hors d’une classe, on parle de fonction tandis qu’à l’intérieur d’une classe, on parle de méthode mais c’est exactement le même procédé.

lower(), capitalize() et upper()

Par exemple, si je veux mettre la chaîne de caractères tout en minuscules, je vais utiliser la méthode lower():

prenom = "Gargamel"
nouveau_prenom = prenom.lower()
print(nouveau_prenom)

J’obtiens ‘gargamel’.

Maintenant, si je veux remettre la première lettre en majuscule, quel outil vais-je donc utiliser? Ah! Ça y est, j’ai trouvé! La méthode capitalize() va me permettre de mener à bien cette opération :

prenom = "gargamel"
nouveau_prenom = prenom.capitalize()
print(nouveau_prenom)

Résultat : ‘Gargamel’

La méthode upper() permet de mettre une chaîne de caractères en majuscules :

prenom = "Gargamel"
nouveau_prenom = prenom.upper()
print(nouveau_prenom)

Résultat : ‘GARGAMEL’

Maintenant, je voudrais préciser quelque chose d’important. Une chaine de caractères est un objet immuable, c’est-à dire qu’il n’est pas possible de le modifier. Alors, vous allez me dire : « Mais enfin! Ordinosor! Tu viens tout juste de modifier la variable prenom pour mettre son contenu tout en majuscules! »

Détrompez-vous! Grâce à la méthode upper(), j’ai créé une nouvelle chaîne de caractères en majuscules que j’ai d’ailleurs stockée dans une nouvelle variable qui possède une autre adresse mémoire (nouveau_prenom). Si j’affiche à nouveau la variable prenom, je vais obtenir ceci : ‘Gargamel’. Ce qui prouve que depuis le début de l’exercice, je n’ai apporté aucune modification à la variable prenom.

« Mais quel est l’utilité pratique de vouloir mettre une chaîne de caractères tout en minuscules, Ordinosor? »

Eh bien parfois, vous devez récupérer la valeur contenue dans un champ d’entrée. Or, il se peut que tel usager va renseigner son prénom sans mettre de majuscules tandis que tel autre va le renseigner avec une majuscule. La méthode lower() permet d’uniformiser tout cela et de faciliter le traitement des informations. Découvrons ensemble d’autres méthodes :

replace(old, new)

Cette méthode prend deux arguments. old correspond au(x) caractère(s) remplacé(s), new correspond au(x) caractère(s) remplaçant(s).

mot = "crudité"
nouveau_mot = mot.replace('di', 'au')
print(nouveau_mot)

Résultat : ‘cruauté’

Là encore, j’ai créé une nouvelle chaîne stockée dans une nouvelle variable. Je n’ai pas modifié la chaîne contenue dans la variable mot.

strip(), lstrip(), rstrip()

strip() supprime les espaces éventuels en début et en fin de chaîne. lstrip() enlève les espaces éventuels seulement en début de chaîne tandis que rstrip() enlève les espaces éventuels en fin de chaîne.

azrael

prenom = "    Azraël    "
nouveau_prenom = prenom.strip()
print(nouveau_prenom)

Résultat : ‘Azraël’

Notez qu’il est tout à fait possible d’utiliser deux méthodes simultanément sur un même objet. Par exemple, je vais supprimer les espaces en début de chaîne et mettre cette dernière en majuscules.

prenom = "    Azraël    "
nouveau_prenom = prenom.lstrip().upper()
print(nouveau_prenom)

Résultat : ‘AZRAËL    ‘

split()

La méthode split() transforme une chaîne en une liste de sous-chaînes. Le séparateur par défaut est un espace mais il est possible de lui donner en argument n’importe quel autre séparateur.

phrase = "Azraël préfère les schtroumpfs aux souris."
liste_mots = phrase.split()
print(liste_mots)

Résultat = [‘Azraël’, ‘préfère’, ‘les’, ‘schtroumpfs’, ‘aux’, ‘souris.’]

phrase = "J'ai trouvé un porte-clé."
liste_mots = phrase.split("-") # Le séparateur est un petit tiret
print(liste_mots)

Résultat : [‘J’ai trouvé un porte’, ‘clé.’]

join(liste)

Cette méthode effectue l’opération inverse de la précédente.

liste_mots =['Azraël', 'est', 'grognon.']
phrase = " ".join(liste_mots)
print(phrase)

Résultat : ‘Azraël est grognon.’

liste_mots =["J'ai trouvé un porte", "clé."]
phrase = "-".join(liste_mots) # Je rassemble les deux chaînes de la liste avec un tiret
print(phrase)

Résultat : ‘J’ai trouvé un porte-clé.’

index(y)

Cette méthode retourne l’indice de la première occurrence de la chaîne passée en argument.

phrase = "J'ai trouvé un porte-clé."
mot = 'porte'
indice = phrase.index(mot)
print(indice)

Résultat : 15

Il est possible de préciser à partir de quel indice la méthode doit chercher l’occurrence. Cherchons un « é » à partir de l’indice 11.

phrase = "J'ai trouvé un porte-clé."
car = 'é'
indice = phrase.index(car, 11)
print(indice)

Résultat : 23

Si la méthode index() ne trouve pas la sous-chaîne, elle retourne une exception :

ValueError: substring not found

find(x)

Cette méthode fait exactement la même chose que la précédente sauf que si elle ne trouve pas la sous-chaîne, elle retourne -1.

phrase = "J'ai trouvé un porte-clé."
car = 'z'
indice = phrase.find(car)
print(indice)

Résultat : -1

count()

Cette méthode retourne le nombre de fois où une sous-chaîne apparait dans une chaîne.

phrase = "J'ai trouvé un porte-clé."
car = 'é'
number = phrase.count(car)
print(number)

Résultat : 2

startswith() et endswith()

startswith() retourne True si la chaîne commence par la sous-chaîne passée en argument. Sinon, elle retourne False.

phrase = "Azraël poursuit un schtroumpf."
mot = phrase.startswith("Azraël")
print(mot)

Résultat : True

endswith() retourne True si la chaîne se termine par la sous-chaîne passée en argument. Sinon, elle retourne False.

phrase = "Azraël poursuit un schtroumpf."
mot = phrase.endswith("lapin")
print(mot)

Résultat : False

Conclusion

Il existe bien d’autres méthodes applicables aux chaînes de caractères (isalnum(), isalpha(), isdigit(), etc…). Si vous souhaitez les découvrir et les appliquer dans vos codes, je vous invite à consulter la documentation officielle du langage Python. Vous y trouverez certainement votre bonheur. Au fil des jours, je ne manquerai pas de compléter cet article avec de nouvelles méthodes.