Méthodes de chaîne dans Python

Effectué

Les méthodes de chaîne sont l’un des types de méthode les plus courants dans Python. Vous devez souvent manipuler des chaînes pour extraire des informations ou les adapter à un certain format. Python comprend plusieurs méthodes de chaîne conçues pour effectuer les transformations les plus courantes et les plus utiles.

Les méthodes de chaîne font partie du type str, ce qui signifie que les méthodes existent sous forme de variables de chaîne ou appartiennent directement à la chaîne. Par exemple, la méthode .title() retourne la chaîne avec des majuscules pour la première lettre des mots et peut être utilisée directement avec une chaîne :

print("temperatures and facts about the moon".title())

Sortie : Temperatures And Facts About The Moon

On retrouve le même comportement et la même utilisation sur une variable :

heading = "temperatures and facts about the moon"
heading_upper = heading.title()
print(heading_upper)

Diviser une chaîne

Une méthode de chaîne courante est .split(). En l’absence d’arguments, la méthode sépare la chaîne à chaque espace. Si vous utilisez la méthode de cette manière, vous créez une liste de tous les mots ou nombres séparés par un espace :

temperatures = "Daylight: 260 F Nighttime: -280 F"
temperatures_list = temperatures.split()
print(temperatures_list)

Sortie : ['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']

Dans cet exemple, vous avez affaire à plusieurs lignes. Le caractère de nouvelle ligne (implicite) peut donc être utilisé pour diviser la chaîne à la fin de chaque ligne, en créant des lignes individuelles :

temperatures = "Daylight: 260 F\n Nighttime: -280 F"
temperatures_list = temperatures.split('\n')
print(temperatures_list)

Sortie : ['Daylight: 260 F', 'Nighttime: -280 F']

Ce type de division est pratique quand vous avez besoin d’une boucle pour traiter ou extraire des informations, ou quand vous chargez des données à partir d’un fichier texte.

Rechercher une chaîne

Certaines méthodes de chaîne peuvent rechercher du contenu avant le traitement, sans utiliser de boucle. Supposons que vous ayez deux phrases qui parlent des températures sur différentes planètes et leurs lunes. Cependant, seules les températures liées à notre Lune vous intéressent. Autrement dit, si les phrases ne parlent pas de la Lune, elles ne doivent pas être traitées pour extraire des informations.

Pour déterminer si un mot, un caractère ou un groupe de caractères donné existe dans une chaîne, le moyen le plus simple est d’utiliser l’opérateur in :

print("Moon" in "This text will describe facts and challenges with space travel")

Sortie : False

print("Moon" in "This text will describe facts about the Moon")

Sortie : True

Pour rechercher la position d’un mot spécifique dans une chaîne, vous pouvez utiliser la méthode .find() :

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Moon"))

Sortie : -1

La méthode .find() retourne -1 quand le mot est introuvable, ou retourne l’index (le nombre représentant l’emplacement dans la chaîne). L’exemple suivant vous montre son comportement si vous recherchez le mot Mars :

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Mars"))

Sortie : 64

64 est la position où "Mars" apparaît dans la chaîne.

Une autre façon de rechercher du contenu est d’utiliser la méthode .count(), qui retourne le nombre total d’occurrences d’un certain mot dans une chaîne :

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.count("Mars"))
print(temperatures.count("Moon"))
1
0

Dans Python, les chaînes respectent la casse, ce qui signifie que Moon et moon sont considérés comme des mots différents. Pour une comparaison insensible à la casse, vous pouvez convertir une chaîne en lettres minuscules avec la méthode .lower() :

print("The Moon And The Earth".lower())

Sortie : the moon and the earth

À l’instar de la méthode .lower(), les chaînes ont une méthode .upper() qui effectue l’inverse, c’est-à-dire convertir tous les caractères en majuscules :

print("The Moon And The Earth".upper())

Sortie : THE MOON AND THE EARTH

Conseil

Quand vous recherchez et vérifiez du contenu, le mieux est de convertir la chaîne en minuscules pour que la casse n’empêche pas les correspondances. Par exemple, si vous comptez le nombre de fois où le mot the apparaît, la méthode ne prend pas en compte le mot The, même s’il s’agit du même mot. Vous pouvez utiliser la méthode .lower() pour convertir tous les caractères en minuscules.

Vérifier le contenu

Les informations que vous voulez extraire d’un texte peuvent parfois ne pas se présenter de la même façon. Par exemple, la chaîne suivante est plus simple à traiter qu’un paragraphe non structuré :

temperatures = "Mars Average Temperature: -60 C"

Pour extraire la température moyenne sur Mars, vous pouvez utiliser les méthodes suivantes :

temperatures = "Mars Average Temperature: -60 C"
parts = temperatures.split(':')
print(parts)
print(parts[-1])
['Mars average temperature', ' -60 C']
' -60 C'

Le code précédent suppose que tout ce qui suit les deux-points (:) est une température. La chaîne est divisée au niveau de :, ce qui génère une liste de deux éléments. L’utilisation de [-1] sur la liste retourne le dernier élément, qui est la température dans cet exemple.

Si le texte est irrégulier, vous ne pouvez pas utiliser les mêmes méthodes de division pour obtenir la valeur. Vous devez exécuter une boucle sur les éléments pour voir si les valeurs sont d’un certain type. Python a des méthodes qui permettent de vérifier le type de chaîne :

mars_temperature = "The highest temperature on Mars is about 30 C"
for item in mars_temperature.split():
    if item.isnumeric():
        print(item)

Sortie : 30

Tout comme la méthode .isnumeric(), .isdecimal() peut rechercher des chaînes qui ressemblent à des décimales.

Important

Vous pouvez être surpris de voir que "-70".isnumeric() retourne False. C’est parce que tous les caractères de la chaîne doivent être numériques et que le tiret (-) n’est pas numérique. Si vous avez besoin de vérifier les nombres négatifs dans une chaîne, la méthode .isnumeric() ne fonctionne pas.

Vous pouvez appliquer des validations supplémentaires aux chaînes pour rechercher les valeurs. Pour les nombres négatifs, le tiret est placé avant le nombre et peut être détecté avec la méthode .startswith() :

print("-60".startswith('-'))

Sortie : True

De même, la méthode .endswith() permet de vérifier le dernier caractère d’une chaîne :

if "30 C".endswith("C"):
    print("This temperature is in Celsius")

Sortie : This temperature is in Celsius

Transformer le texte

D’autres méthodes sont utiles dans les cas où le texte doit être transformé en autre chose. Jusqu’à présent, vous avez vu des chaînes pouvant utiliser C pour Celsius et F pour Fahrenheit. Vous pouvez utiliser la méthode .replace() pour chercher et remplacer des occurrences d’un caractère ou d’un groupe de caractères :

print("Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C"))

Sortie : Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.

Comme mentionné plus tôt, .lower() est un bon moyen de normaliser le texte pour effectuer une recherche insensible à la casse. Vérifions rapidement si du texte mentionne des températures :

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text)

Sortie : False

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text.lower())

Sortie : True

Vous n’avez peut-être pas besoin d’utiliser une vérification insensible à la casse tout le temps, mais la conversion en minuscules est une bonne approche quand le texte utilise une casse mixte.

Une fois que vous avez divisé le texte et effectué les transformations, il est possible que vous deviez assembler toutes les parties. Tout comme la méthode .split() peut séparer des caractères, la méthode .join() peut les rassembler.

La méthode .join() nécessite un itérable (par exemple, une liste Python) comme argument, de sorte que son utilisation diffère des autres méthodes de chaîne :

moon_facts = ["The Moon is drifting away from the Earth.", "On average, the Moon is moving about 4cm every year."]
print(' '.join(moon_facts))

Sortie : The Moon is drifting away from the Earth. On average, the Moon is moving about 4cm every year.

Dans cet exemple, ' ' est utilisé pour joindre chaque élément de la liste.