Le texte

Informatique — Python, chapitre 2

Le chapitre précédent n’a manipulé que des nombres. Or un travail empirique manipule aussi des noms de variables, des libellés de modalités, des chemins de fichiers et des messages à afficher. Python traite le texte avec une richesse peu commune, et c’est l’un de ses avantages nets sur les langages purement numériques.

2.1 Créer une chaîne

2.1.1 Guillemets simples ou doubles

a = "Tanger" b = 'Tanger' print(a == b)

Disposer des deux permet d’inclure l’un dans l’autre sans effort.

print("l'economie marocaine") # apostrophe dans des guillemets doubles print('il a dit "bonjour"') # guillemets dans des simples

2.1.2 Texte sur plusieurs lignes

texte = """Premiere ligne Deuxieme ligne Troisieme ligne""" print(texte)

Le triple guillemet conserve les retours à la ligne tels qu’ils sont écrits. Il sert aussi aux docstrings, ces descriptions de fonctions que présente le chapitre 6.

2.1.3 Les caractères spéciaux

print("ligne 1\nligne 2") # \n : retour a la ligne print("colonne 1\tcolonne 2") # \t : tabulation print("C:\\Users\\moi") # \\ : une vraie barre inversee
AvertissementLes chemins Windows

"C:\Users\notes" pose un problème : \n y est interprété comme un retour à la ligne, et \U déclenche une erreur.

Deux solutions : doubler les barres ("C:\\Users\\notes"), ou préfixer la chaîne d’un r — pour raw — qui désactive toute interprétation : r"C:\Users\notes".

La seconde est plus lisible, et c’est celle qu’emploient les bibliothèques de lecture de fichiers.

2.2 Assembler et répéter

prenom = "Amina" ville = "Tanger" print(prenom + " habite " + ville) print("-" * 30) # une ligne de separation

Avec du texte, + ne calcule pas : il concatène. Et * répète, ce qui produit commodément des séparateurs.

AvertissementOn ne colle pas un nombre à du texte
age = 25
print("age : " + age)      # TypeError

Python refuse. Il faut convertir : "age : " + str(age). Mais la section suivante montre une écriture bien meilleure.

2.3 Les f-strings

2.3.1 Le principe

C’est l’écriture moderne, à privilégier systématiquement. Un f devant les guillemets, et toute expression entre accolades est évaluée.

prenom = "Amina" age = 25 print(f"{prenom} a {age} ans") print(f"Dans dix ans, elle aura {age + 10} ans")

Aucune conversion, aucun +, et l’on lit la phrase telle qu’elle s’affichera.

2.3.2 Le formatage des nombres

C’est ici que les f-strings deviennent indispensables pour présenter des résultats.

x = 3.14159265 n = 1234567.891 p = 0.0734 print(f"{x:.2f}") # deux decimales print(f"{n:,.1f}") # separateur de milliers print(f"{p:.1%}") # en pourcentage print(f"{x:10.3f}") # largeur 10, aligne a droite print(f"{n:.3e}") # notation scientifique
Code Effet
:.2f deux décimales fixes
:,.1f séparateur de milliers
:.1% multiplie par 100 et ajoute %
:>10, :<10, :^10 aligné à droite, à gauche, centré
:.3e notation scientifique
villes = [("Tanger", 45.2), ("Rabat", 62.15), ("Fes", 38.7)] for v, pib in villes: print(f"{v:<10} {pib:>8.2f}")
AstuceLe raccourci de débogage
x = 42
print(f"{x = }")        # affiche : x = 42

Le signe égal dans les accolades affiche le nom et la valeur. Pour suivre l’évolution d’une variable dans un calcul, c’est plus rapide que d’écrire les deux à la main.

2.4 Découper et extraire

2.4.1 Par position

Une chaîne se comporte comme une suite de caractères, numérotée à partir de zéro.

mot = "econometrie" print(mot[0]) # le premier print(mot[1]) # le deuxieme print(mot[-1]) # le dernier print(mot[-2]) # l'avant-dernier print(len(mot)) # nombre de caracteres
ImportantDeux conventions à ne jamais confondre

Python numérote à partir de 0. R et MATLAB numérotent à partir de 1.

En revanche, l’indice négatif de Python compte depuis la fin : mot[-1] est le dernier caractère. En R, v[-1] signifierait « tout sauf le premier » — un sens complètement différent.

Si vous pratiquez les deux langages, ces deux règles sont la première source d’erreurs.

2.4.2 Les tranches

mot = "econometrie" print(mot[0:4]) # du 0e au 3e : 'econ' print(mot[:4]) # depuis le debut print(mot[4:]) # jusqu'a la fin print(mot[-3:]) # les trois derniers print(mot[::2]) # un caractere sur deux print(mot[::-1]) # a l'envers
AvertissementLa borne de fin est exclue

mot[0:4] renvoie quatre caractères : les indices 0, 1, 2 et 3. Le 4 n’y est pas.

Cela paraît arbitraire, mais rend deux choses naturelles : mot[:4] + mot[4:] reconstitue le mot entier sans chevauchement ni trou, et fin - debut donne directement le nombre de caractères extraits.

Cette convention vaut pour les listes du chapitre suivant, et pour range au chapitre 4.

2.5 Transformer

2.5.1 Les méthodes

Une méthode est une fonction attachée à un objet : on l’appelle avec un point.

v = " Economie Marocaine " print(v.strip()) # retirer les espaces aux extremites print(v.lower()) # minuscules print(v.upper()) # majuscules print(v.strip().replace("Marocaine", "du Maroc"))

Les méthodes s’enchaînent de gauche à droite : v.strip().lower() nettoie puis met en minuscules.

ImportantUne chaîne ne se modifie jamais
v = "tanger"
v.upper()
print(v)         # affiche toujours 'tanger'

Les méthodes renvoient une nouvelle chaîne sans toucher à l’originale. Pour conserver le résultat, il faut le réaffecter : v = v.upper().

C’est l’erreur la plus fréquente du chapitre. Les listes, elles, se modifient sur place — le chapitre suivant y revient.

2.5.2 Découper et rassembler

ligne = "Tanger;45.2;Nord" morceaux = ligne.split(";") print(morceaux) print(morceaux[0]) print(" | ".join(morceaux))

split découpe une chaîne en liste, join rassemble une liste en chaîne. Ces deux méthodes suffisent à lire un fichier CSV à la main — c’est ce que fera le chapitre 7.

Sans argument, split découpe sur les espaces, ce qui est commode pour compter des mots.

phrase = "la statistique est la grammaire de la science" mots = phrase.split() print(len(mots)) print(mots.count("la"))

2.5.3 Chercher et vérifier

nom = "taux_chomage_2023" print("chomage" in nom) # appartenance : True print(nom.startswith("taux")) # commence par print(nom.endswith("2023")) # finit par print(nom.find("chomage")) # position, -1 si absent print(nom.count("_")) # nombre d'occurrences

L’opérateur in est le plus lisible pour tester une appartenance. Il fonctionne aussi sur les listes du chapitre suivant.

2.6 Un cas concret : nettoyer des libellés

libelles = [" Taux de Chomage ", "PIB PAR HABITANT", " Population Totale"] propres = [] for x in libelles: propre = x.strip().lower().replace(" ", "_") propres.append(propre) print(propres)

Trois méthodes enchaînées transforment des en-têtes de tableur en noms de variables exploitables. C’est exactement le genre de tâche pour laquelle Python est meilleur que la plupart des logiciels statistiques.

À vous

À partir de la ligne "Rabat;62.15;Centre;8.4", extrayez le nom de la ville en majuscules, le PIB arrondi à une décimale, et affichez le tout dans une phrase formatée.

ligne = "Rabat;62.15;Centre;8.4" # a completer
champs = ligne.split(";")

ville = champs[0].upper()
pib = float(champs[1])
region = champs[2]
chomage = float(champs[3])

print(f"{ville} ({region}) : PIB {pib:.1f} Md, chomage {chomage:.1f} %")

Notez le float(...) : les morceaux issus d’un split sont toujours du texte, même quand ils ressemblent à des nombres. Sans conversion, le formatage .1f échouerait.

Ce qu’il faut retenir

Écriture Effet
"...", '...', """...""" créer une chaîne, sur une ou plusieurs lignes
r"C:\dossier" chaîne brute — pour les chemins Windows
+, * coller, répéter
f"{x} et {y:.2f}" f-string : l’écriture à privilégier
:.2f, :,.1f, :.1%, :>10 formater un nombre
mot[0], mot[-1] premier, dernier caractère — on compte depuis 0
mot[2:5] tranche — la borne de fin est exclue
strip, lower, upper, replace nettoyer et transformer
split, join découper en liste, rassembler en chaîne
in, startswith, find, count chercher et vérifier
v = v.upper() une chaîne ne se modifie jamais sur place

Le chapitre suivant présente la structure la plus employée du langage : la liste, qui rassemble plusieurs valeurs sous un seul nom.