14. Retour sur les chaînes#

Nous avons abordé les chaines de caractères en les présentant comme des séquences, ce qu’elles sont. Mais nous allons maintenant voir ce qui les différencient, quelles sont les possiblités qu’elles offrent.

14.1. Notations#

Il existe plusieurs notation pour représenter une chaine de caractères :

  • en utilisant des guillemets, nous l’avons déjà vu, "une chaine" ;

  • en utilisant des apostrophes, une chaine ;

  • en utilisant des triples guillemets ou apostrophes, """une chaine""" ou '''une chaine'''.

L’intérêt de ces notations multiples est de pouvoir choisir en fonction du besoin le délimiteur de chaine le plus aproprié. Si l’on souhaite intégrer une apostrophe dans une chaine, on utilise la notation "C'est une chaine". Mais si on a besoin d’intégrer des guillemets, il faudra utiliser la notation 'un exemple "approprié"'.

Les chaines de caractères avec les notations triples permettent encore plus de souplesse pour les délimiteurs mais également d’inclure des retours à la ligne dans les chaines (ce qui est impossible avec les simples délimiteurs).

c = """c'est une chaine sur
"plusieurs"
lignes"""

14.2. Caractères spéciaux#

La problématique des délimiteurs peut être toujours contourné. En effet, dans une chaine de caractères, il est possible « d’échapper » un caractère en utilisant un backslah \. Le caractère suivant le backslah est alors interprété de manière spéciale. Voici une liste non exhaustive de caractères spéciaux.

  • \", guillemet qui n’est pas considéré comme un délimiteur de chaine ;

  • \', apostrophe qui n’est pas considéré comme un délimiteur de chaine ;

  • \n, retour à la ligne ;

  • \t, tabulation ;

  • \b, backspace ;

  • \\, backslash.

Vous pourrez tester, les chaines c et d sont égales.

d = 'c\'est une chaine sur\n"plusieurs"\nligne'

Il est possible de bloquer l’échappement des caractères. Pour cela, on préfixe le délimiteur de la chaine de caractères avec r. Ainsi r"\\" est effectivement une chaine avec deux backslashs consécutifs.

14.3. Fonctions spéciales#

De nombreuses fonctions permettent de manipuler des chaines de caractères. Pour les appeller il est toujours nécessaire d’utiliser la notation variable.fonction(). Par exemple, nous avons déjà parlé de la fonction upper qui conevrti une chaine en majuscule. Voici un exemple d’utilisation.

Rappelez vous qu’une chaine est une séquence non-mutable.

c = "une chaine"
print(c)
c = c.upper()
print(c)
une chaine
UNE CHAINE

Mise en forme

  • upper, renvoie une chaine en majuscule ;

  • lower, renvoie une chaine en minuscule ;

  • capitalize, renvoie une chaine avec le premier caractère en majuscule et les autres en minuscule.

"une CHAINE".capitalize()
'Une chaine'

Tests

  • isalpha, isnumeric, isalnum, pour vérifier si les caractère sont alphabétique, numérique ou alphanumérique ;

  • islower, isupper, pour tester si tous les caractères sont de même casse ;

  • isspace, pour tester si tous les caractères sont blancs (espace, tabulation, retour à la ligne, …).

Recherche

  • startswith(sub), endswith(sub), pour tester si une chaine commence ou termine par sub ;

  • find(sub) (resp. rfind(sub)), renvoie le plus petit (resp. plus haut) index de la chaine sub ou -1 si elle n’est pas présente.

Nettoyage

  • lstrip, rstrip, strip, suppriment les caractères blancs à gauche, à droite ou des deux cotés d’une chaine.

Fusion / Division

  • split(sep), permet de scinder une chaine chaque fois que l’on rencontre un separateur donnée en paramètres. Les différents morceaux sont renvoyer sous forme d’une liste de sous-chaines.

  • join(iter), renvoie une chaîne qui est la concaténation des chaînes dans la séquence iter. Le séparateur utilisé est la chaîne sur laquelle on appelle la fonction join.

data = "10, 2, 4.5"
data.split(",")
['10', ' 2', ' 4.5']
vecteur = ("0", "5", "2", "-5")
", ".join(vecteur)
'0, 5, 2, -5'

14.4. Variable dans une chaine#

La fonction format, permet d’insérer des variables dans des chaines de caractères à des emplacements spécifiés. La méthode s’appelle sur une chaîne. Elle remplace chaque “{}” par les paramètres que l’on donne à la fonction. Il est possible de nommer les paramètres pour plus de clarté. Nous n’avons pas encore parlé des paramètres nommés, nous reviendrons dessus rapidement…

Ces quelques exemples devraient vous aider à comprendre le fonctionnement.

'{}, {}, {}'.format('a', 'b', 'c')
'a, b, c'
'{2}, {1}, {0}, {2}'.format('a', 'b', 'c')
'c, b, a, c'
# Nommer les paramètres permet de choisir l'ordre d'apparition.
'{lat}, {long}'.format(long='111W', lat='37N')
'37N, 111W'
# Représentation des nombres en notation scientifique (puissance de 10) ou en flotant avec une précision fixée.
"{:.1e}, {:.3f}".format(100,3.14)
'1.0e+02, 3.140'
# Représentation du nombre n en binaire, octal, hexadécimal avec minuscule ou majuscule.
"{n:b}, {n:o}, {n:x}-{n:X}".format(n=26)
'11010, 32, 1a-1A'

Il peut être fastidueux d’utiliser la fonction format, Python a donc intégré une forme raccourci. Pour cela, on fait précéder le délimiteur d’une chaine par f. On peut alors intégrer directement dans la chaine des variables entre accolades. Elles seront interprétées et insérées dans la chaine.

x = 10
y = 3.14
f"Un entier {x} et un nombre à virgule {y}"
'Un entier 10 et un nombre à virgule 3.14'