5.python Chaines PDF

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 17

Ateliers Python : Les chaînes de caractères.

par X. HINAULT
www.mon-club-elec.fr

Tous droits réservés – 2013 - 2016.

Document gratuit.
Ce support PDF d'atelier Python + Qt vous est offert.
Pour acheter d'autres supports d'ateliers Python rendez-vous ici :
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.PythonShell

Vous avez constaté une erreur ? une coquille ? N'hésitez pas à nous le signaler à cette adresse : support@mon-club-elec.fr

Truc d'utilisation : visualiser ce document en mode diaporama dans le visionneur PDF. Navigation avec les flèches HAUT / BAS ou la souris.
En mode fenêtre, activer le panneau latéral vous facilitera la navigation dans le document. Bonne lecture !

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 1 / 17


Python : Les chaînes de caractères
Par X. HINAULT – Mai 2013 – 2016 – www.mon-club-elec.fr – Tous droits réservés

Ce que l'on va faire ici


• Dans ce tutoriel, apprenez à utiliser les chaînes de caractères en langage Python qui offre une nouvelle fois de nombreuses possibilités très
intéressantes.

Pré-requis : un système graphique opérationnel


• Je suppose ici que vous disposez
◦ d'un système graphique opérationnel (Gnu/Linux, Windows, Mac OsX) :
◦ avec Python installé ainsi que l'interpréteur Python de votre choix

Lancer l'interpréteur Python


• Commencer par la lancer l'interpréteur Python que vous souhaitez utiliser, soit en ligne de commande depuis une console, soit à partir du menu
graphique du système.
• Par exemple, pour lancer ipython, on fera :
$ ipython qtconsole
• ce qui donne :

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 2 / 17


• De façon comparable, on lancera dreampie en faisant :
$ dreampie
• On obtient :

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 3 / 17


• A noter avec Dreampie la particularité qui consiste à saisir les instructions Python dans la fenêtre du bas.
Conseil d'ami : paramétrer la fenêtre de votre interpréteur en mode « toujours au dessus » (clic droit sur la barre de titre sous Gnu/Linux) pour pouvoir
facilement travailler avec ce tuto.

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 4 / 17


Déclarer une chaîne de caractère
La déclaration d'une chaîne de caractère se fait très simplement :
>>> maChaine="coucou"
>>> print maChaine
coucou

Difficile de faire plus simple. Et remarquer qu'il n'a pas été nécessaire de préciser le type de notre variable. En langage Python, les chaînes de
caractères sont stockées dans le type 'str'. La variable déclarée ici a été automatiquement typée, comme vous pouvez le vérifier en posant :
>>> type(maChaine)
<type 'str'>

Il est également possible de déclarer une chaîne multiligne en l'encadrant avec des triples " " ", ce qui donne :
>>> monTexte="""blablabla
... bliblibli
... bloblo
... bloubloublou
... """
>>> print monTexte
blablabla
bliblibli
bloblo
bloubloublou

Cette possibilité de définir une chaîne de caractère multiligne est très très intéressante notamment pour intégrer par simple copier/coller des extraits de
code HTML ou autre « tel que » dans un script. Retenez çà... !!

Le type str dispose de nombreuses fonctions et nous allons ici présenter quelques-unes intéressantes en pratique :
http://docs.python.org/2/library/stdtypes.html#string-methods

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 5 / 17


Associer des chaînes entre elles
Il est assez simple d'associer des chaînes entre-elles de façon à former une seule chaîne finale : on utilisera simplement le signe + entre les 2 chaînes, ce
qui donne :
>>> maChaine1="coucou"
>>> maChaine2="les amis"
>>> chaineFinale=maChaine1+" "+maChaine2
>>> print chaineFinale
coucou les amis
Simple...

Conversion d'une valeur numérique en chaîne de caractères


Une première chose qu'il est utile de savoir faire en pratique : convertir une valeur numérique en chaîne de caractères. Ceci est obligatoire lorsque l'on
souhaite intégrer une valeur numérique dans une chaîne passée en paramètre à une fonction. Exemple :
>>> a=321
>>> print "valeur" + a
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
print "valeur" + a
TypeError: cannot concatenate 'str' and 'int' objects
On obtient un message d'erreur ! Qu'est-ce qui se passe ici : la chaîne est considérée logiquement comme un type str mais la valeur numérique est
considérée comme un int. On peut le vérifier simplement :
>>> type(a)
0: <type 'int'>
>>> type("valeur")
1: <type 'str'>
Le signe + correspond à une concaténation (= fusion ) pour les chaînes mais à une addition pour les valeurs numériques. Pour résoudre ce problème, il
faut simplement « caster », c'est à dire transformer le int en str ce qui se fait en faisant : str(variable). Notre exemple devient :
>>> a=321
>>> print "valeur = "+ str(a)
valeur = 321
Cette fois, l'association des chaînes a bien fonctionné car les 2 éléments sont de type str.
Bien que le langage Python attribue automatiquement les types, cet exemple montre qu'il est important lorsque l'on utilise le langage Python d'être
conscient du type attribué par Python à tel ou tel élément pour comprendre les messages d'erreur et pouvoir les résoudre simplement.
Cette situation consistant à « caster » une variable numérique en chaîne sera rencontrée fréquemment. Donc retenez çà.

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 6 / 17


Conversion d'une chaîne de caractères en valeur numérique
Une autre situation que l'on rencontre souvent : extraire une valeur numérique à partir d'une chaîne. Typiquement, on obtiendra une chaîne à partir
d'une saisie utilisateur ou bien une réception sur le port série ou le réseau. Exemple :
>>> a="123"
>>> a=a+3
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a=a+3
TypeError: cannot concatenate 'str' and 'int' objects

Cette fois, on retrouve le même message d'erreur que précédemment, mais ici nous voulions le résultat opposé : réalisé une opération mathématique sur
la valeur a, défini ici comme une chaîne. Il va falloir là encore « caster » la variable, c'est à dire la transformer dans un type numérique, au choix int,
long ou float, ce qui donne :
>>> a="123"
>>> a=int(a)+3
>>> print a
126
>>> type(a)
0: <type 'int'>

On ferait de même pour avoir une valeur float en posant float(variable).

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 7 / 17


Vérifier si tous les caractères d'une chaîne sont des chiffres
Avant de convertir une chaîne en valeur numérique comme nous venons de le voir, il est utile de vérifier au préalable qu'elle n'est bien constituée que
de chiffres. Le type str du langage Python dispose de la fonction isdigit() pour réaliser cela simplement. Exemple :
>>> a="123"
>>> if a.isdigit():
... print "que des chiffres"
... print "valeur = " + int(a)
... else:
... print "pas que des chiffres"
que des chiffres
et :
>>> a="123ab"
>>> if a.isdigit():
... print "que des chiffres"
... print "valeur = " + a
... else:
... print "pas que des chiffres"
pas que des chiffres

Une fonction comparable existe pour tester si une chaîne ne contient que des caractères alpha-numériques : isalnum(). Exemple :
>>> a="123ab ;"
>>> if a.isalnum():
... print "que des chiffres et lettres"
... else:
... print "pas que des chiffres et lettres"
Moins utile, mais à ne pas confondre isalnum() et isdigit()

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 8 / 17


Scinder une chaîne

Scinder une chaîne à l'aide d'un caractère de séparation


Une opération que l'on peut être fréquemment amené à réaliser sur une chaîne : la « couper » en sous-chaînes séparées par un séparateur précis. Par
exemple, couper la chaîne « coucou, salut, hello » en « coucou » « salut » et « hello ».
La fonction qui permet cela est la fonction split du type str : cette fonction reçoit en paramètre le séparateur et renvoie un objet list contenant toutes les
sous-chaînes obtenues. Un petit exemple d'application :
>>> chaine="coucou,salut,hello"
>>> print chaine
coucou, salut, hello
>>> mots=chaine.split(',')
>>> print mots
['coucou', 'salut', 'hello']
On peut facilement vérifier que notre objet mots est un objet list :
>>> type(mots)
1: <type 'list'>
Il est ensuite assez facile d'accéder à chaque élément individuellement :
>>> for i in range(0,len(mots),1):
... print mots[i]
coucou
salut
hello
Noter que chaque élément est un type str :
>>> type(mots[0])
2: <type 'str'>

Voir : http://docs.python.org/2/library/stdtypes.html#str.split

Scinder une chaîne multi-lignes en lignes


Une opération très pratique est la possibilité de scinder une chaîne multilignes en lignes individuelles, simplement à l'aide de la fonction splitlines() de
l'objet str. Par exemple :
>>> chaine=""" Bonjour les amis.
... Comment allez-vous ?
... Moi je vais bien
... """

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 9 / 17


>>> chaine.splitlines()
[' Bonjour les amis.', 'Comment allez-vous ?', 'Moi je vais bien']

On obtient une liste contenant les chaînes correspondant aux lignes. Noter que le caractère de fin de ligne est exclu des lignes obtenues.
Voir : http://docs.python.org/2/library/stdtypes.html#str.splitlines

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 10 / 17


Rechercher une sous-chaîne dans une chaîne
Plusieurs fonctions permettent également d'analyser une chaîne et d'y rechercher une sous-chaîne précise.
Tout d'abord, l'opérateur in renvoie True si la chaîne recherchée est présente dans la chaîne analysée :
>>> "ou" in "coucou"
1: True
>>> "on" in "coucou"
2: False

Plus précise, la fonction find() renvoie l'index de la première occurrence d'une sous-chaîne au sein d'une chaîne. find() renvoie -1 si la sous-chaîne n'est
pas retrouvée. Exemple :
>>> chaine="coucou"
>>> chaine.find("ou")
5: 1
>>> chaine.find("on")
6: -1

Si on veut compter le nombre d'occurrences d'une sous-chaîne dans une chaîne, on fera :
>>> chaine="coucou"
>>> chaine.count("ou")
2
Pratique également, la fonction startswith qui permet de tester si une chaîne commence par une sous-chaîne précise. Exemple :
>>> requete="GET /page.html HTTP/1.1"
>>> requete.startswith("GET")
7: True

A l'inverse, la chaîne endswith permet de tester si une chaîne se termine bien par une sous-chaîne précise :
>>> chaine="valeur=245=:"
>>> chaine.endswith("=:")
9: True

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 11 / 17


Extraire sous chaînes à partir des index
Voici une des fonctionnalités les plus puissantes du langage Python : ce que l'on appelle le slicing, la possibilité de facilement extraire des éléments
d'une liste, d'une chaîne de caractères, etc...
Le principe est le suivant :
• on utilise le : pour signifier les éléments quelconques
• on utilise l'indice pour signifier un élément précis,
• on place le tout entre [ ] après le nom de la chaîne.
Par exemple, soit la chaine :
>>> chaine="0123456789"
Pour extraire les caractères du début à l'indice 5, on fera :
>>> chaine[:5]
0: '01234'
Pour extraire les caractères de l'indice 5 à la fin, on fera :
>>> chaine[5:]
2: '56789'
Pour extraire les caractères de l'indice 3 à l'indice 7, on fera :
>>> chaine[3:7]
1: '3456'
Cool non ? Encore mieux : la même chose à l'envers... Par exemple, pour extraire les 2 derniers caractères d'une chaîne, on fera :
>>> chaine[-2:]
3: '89'

Encore plus fort : extraire 1 élément sur 2 d'une chaine :


>>> chaine[::2]
4: '02468'

Noter que del ne fonctionne pas avec un objet str

Retenez bien ce système de notation car il vous servira souvent, aussi bien avec des listes, des chaînes de caractères que des tableau Numpy,
etc... Très pratique et puissant !

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 12 / 17


Pour plus de détails, voir :
http://docs.python.org/2/tutorial/introduction.html
http://docs.python.org/release/2.3.5/whatsnew/section-slices.html

Autres fonctions
Nous venons de voir quelques fonctions essentielles en pratique pour manipuler des chaînes de caractères. Cependant, les fonctions de l'objet str sont
beaucoup plus nombreuses et vous les découvrirez à l'usage selon vos besoin.
Voir ici : http://docs.python.org/2/library/stdtypes.html#string-methods

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 13 / 17


Caractères spéciaux
Il est bien sûr possible d'insérer les caractères spéciaux dans les chaînes de caractères en faisant précéder le symbole du caractère d'un \
Les plus utiles sont :
• \n : saut de ligne
• \t : tabulation
Exemples :
>>> print "\tcoucou"
coucou
>>> print "coucou\n"
coucou

>>>
Remarque : la fonction « print » de la console intègre automatiquement un saut de ligne. Pour éviter le saut de ligne, ajouter simplement une virgule en
fin d'instruction. Exemple :
>>> for i in range(10):
... print i
0
1
2
3
4
5
6
7
8
9
>>> for i in range(10):
... print i,
0123456789

A savoir : des possibilités avancées de formatage et de traitement des chaînes de caractères


Le type str du langage Python dispose de fonctionnalités de formatage des chaînes assez élaborées, qui ne sont pas indispensables à connaître dans une
première approche, mais que l'on pourra prendre le temps de découvrir à l'occasion : http://docs.python.org/2/library/stdtypes.html#string-formatting-
operations
D'autre part, le langage Python dispose de librairies externes ( ou modules, on verra çà par la suite) qui étendent encore davantage au besoin les
possibilités de traitement et de formatage des chaînes de caractères en Python :

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 14 / 17


• le module string pour le formatage des chaînes de caractères : http://docs.python.org/2/library/string.html#module-string
• le module re pour l'utilisation des « expressions régulières » qui permettent des analyses avancées des chaînes de caractères :
http://docs.python.org/2/library/re.html#module-re
Nous présenterons tout ceci ultérieurement, mais cela n'est pas indispensable à connaître dans une première approche.

Truc avancé : Exécuter une chaîne de caractère en tant que fonction Python
Une dernière chose qui pourra vous être utile à l'occasion : il est possible d'exécuter une chaîne de caractère en tant qu'instruction Python avec la
fonction eval(). L'utilisation de cette fonction n'est pas recommandée, mais il est des situations où cela peut être pratique.
Par exemple, imaginons que l'on réalise une interface avec une zone texte dans laquelle il est possible de saisir une formule : il sera ainsi possible de
rendre l'application puissamment interactive.
Par exemple, voici un calcul réalisé de la sorte :
>>> x=23
>>> chaine="(x*3)+2"
>>> print eval(chaine)
71

En pratique, ceci est déconseillé car cela peut créer des failles de sécurité significatives.

Conclusion
A ce stade, vous avez les rudiments pour utiliser efficacement les chaînes de caractères en langage Python. N'hésitez pas à faire vos propres essais dans
votre interpréteur favori, c'est comme çà qu'on apprend à coder ! Et maîtriser ces choses en apparence simple vous simplifiera grandement l'existence
lorsque vous attaquerez des codages plus complexes.

Remarque
...

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 15 / 17


Conclusion

Les instructions du langage Python vue dans ce tuto


….

Exercices

Trouver la chaîne la plus longue et son indice de début dans une suite de caractères :

#!/usr/bin/python
# -*- coding: utf-8 -*-

#!/usr/bin/python
# -*- coding: utf-8 -*-

# test.py

import re

test="001100220000000222211110022111100222110001110001100011001122222220011"

resultList= [ [i.start(), i.end()-i.start()] for i in re.finditer('0+', test)] # liste des indexStart / longeur

lenList= [j[1] for j in resultList] # liste des longueurs des chaines trouvées

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 16 / 17


#lenList=list(zip(*resultList))[1] # idem

index=lenList.index(max(lenList)) # l'index de la chaine la plus longue

indexStart=resultList[index][0] # l'index du début de la chaine la plus longue

print (resultList)
print (lenList)
print (index)
print (indexStart)

Ateliers Python : Les chaînes de caractères.– Par X. HINAULT – p. 17 / 17

Vous aimerez peut-être aussi