Apprendre à Programmer En Python (III)

publicité
Licence Sciences du Vivant | Biologie & Mathématiques | 2011-2012
Apprendre à Programmer
En Python (III)
mark.h
Prise en main et éléments de base du langage
Mark Hoebeke
[email protected]
L1 | Python (III) | p. 1
Plan
Apprendre à Programmer en Python (III)
●
Manipulation d'informations textuelles
●
Les chaînes de caractères
●
Les expressions régulières
mark.h
●
Arguments de la ligne de commande.
●
Exercices
L1 | Python (III) | p. 2
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Chaînes de caractères
●
Découpage de chaînes de caractères :
●
string.split(s[,sep[,maxsplit]]) : découpe la chaîne de caractères s
selon le séparateur sep (optionnel, par défaut : caractère d'espacement), aux
maximum maxsplit fois.
>>> print string.split('Decoupage de phrases en mots isoles')
['Decoupage', 'de', 'phrases', 'en', 'mots', 'isoles']
>>> print string.split('Decoupage de phrases en mots isoles','o')
mark.h
['Dec','upage de phrases en m','ts is','les']
>>> print string.split('Decoupage de phrases en mots isoles','o',1)
['Dec','upage de phrases en mots isoles']
●
Assemblage de chaînes de caractères :
●
string.join(l,sep) : construit une chaîne de caractères en concaténant les
éléments de la liste l à l'aide du séparateur sep.
>>> print string.join(string.split('Decoupage de phrases en mots isoles'),'+')
Decoupage+de+phrases+en+mots+isoles
L1 | Python (III) | p. 3
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Chaînes de caractères
●
Comptage d'occurrences d'une sous-chaîne dans une chaîne
●
string.count(s,sub) : retourne le nombre de fois où la chaîne de caractères
sub sapparaît dans la chaîne s.
>>> print string.count('Comptage de sous­chaines dans des chaines','chaines')
2
●
Recherche d'une sous-chaîne dans une chaîne :
mark.h
●
string.find(s,sub[,start[,end]]) : retourne la position à laquelle la souschaîne sub a été trouvée dans la chaîne s. start est la position à partir de laquelle la
recherche doit commencer, et end la dernière position possible pour la dernière lettre
de sub.
>>> print string.find('Comptage de sous­chaines dans des chaines','chaines')
17
>>> print string.find('Comptage de sous­chaines dans des chaines','chaines',18)
34
>>> print string.find('Comptage de sous­chaines dans des chaines', 'chaines', 0,18)
­1
L1 | Python (III) | p. 4
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Chaînes de caractères
●
Remplacement de sous-chaînes dans une chaîne :
●
string.replace(s,ancien,nouveau[,max]) : retourne une chaîne de
caractères où toutes (ou au plus max) occurrences de la sous-chaîne ancien dans s
sont remplacées par nouveau.
>>> print string.replace('Comptage de sous­chaines dans des chaines', 'chaines','mots')
Comptage de sous­mots dans des mots
mark.h
>>> print string.replace('Comptage de sous­chaines dans des chaines', 'chaines','mots',1)
Comptage de sous­mots dans des chaines
L1 | Python (III) | p. 5
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières
●
●
●
Une expression régulière est une chaîne de caractères qui désigne un motif
répondant à certaines contraintes.
Ce motif peut correspondre à un ensemble potentiellement très étendu de
chaînes de caractères
Les contraintes peuvent porter sur :
●
●
La nature des caractères qui composent le motif (chiffres, lettres,
mark.h
caractères d'espacement, énumérations).
●
Le nombre de fois (minimal et/ou maximal) où ils doivent être présents.
●
Leur succession dans le motif.
Les expressions régulières sont utilisées pour confronter ces motifs à des
chaînes de caractères :
●
Pour en vérifier la conformité.
●
Pour en extraire des éléments.
L1 | Python (III) | p. 6
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières (exemple)
●
Pour extraire les composants d'une date dont la forme est jj/mmm/aaa
d'une ligne de texte :
●
●
●
On construit une expression régulière qui spécifie un motif :
–
Commençant par deux chiffres,
–
Suivis d'une barre oblique (slash),
–
Suivie de trois lettres (minuscules),
mark.h
–
Suivies d'un slash,
–
Suivi de quatre chiffres.
On recherche la(les) correspondance(s) de l'expression régulière dans
le texte à l'aide d'une fonction.
On extrait de chaque correspondance trouvée les champs
correspondant au jour, au mois et à l'année.
L1 | Python (III) | p. 7
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières
●
Toutes les fonctionnalités relatives aux expressions régulières sont
contenues dans le module re :
●
●
Les outils pour la construction des motifs.
Les fonctions pour rechercher les correspondances des motifs dans les
chaînes de caractères.
mark.h
●
Les fonctions pour remplacer ces correspondances.
●
Les fonctions pour extraire ces correspondances dans des variables.
L1 | Python (III) | p. 8
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières
●
Ce sont des chaînes de caractères pouvant comporter des constructions spécifiques :
●
Pour définir des ensembles de caractères :
–
'\w' : caractère alphanumérique (lettre, chiffre, sous-ligné).
–
'\d' : chiffre de 0 à 9.
–
'\s' : caractère d'espacement.
–
'[aeiou]' : liste arbitraire de caractères (ici les voyelles minuscules).
–
'.' : remplace n'importe quel caractère.
mark.h
●
●
Pour indiquer le nombre de fois où ils peuvent/doivent apparaître :
–
'x*' : x peut apparaître 0 fois ou plus.
–
'x?' : x peut apparaître 0 ou une fois.
–
'x+' : x doit apparaître au moins une fois.
–
'x{3}' : x doit apparaître exactement trois fois.
–
'x{4,6}' : x doit apparaître entre 4 et 6 fois.
Pour grouper des éléments de motif, les parenthèses peuvent être utilsées. Les
éléments ainsi capturés pouront être réutilisés par la suite :
–
●
'(\d\w){4}' : un couple composé d'un chiffre suivi d'une lettre doit apparaître 4 fois.
L1 | Python (III) | p. 9
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières
●
Construction d'expressions régulières en Python :
●
re.compile(r[,flags]) : crée une «expression régulière compilée», à
partir du motif r, utilisable pour rechercher des correspondances dans des
chaînes de caractères. Des indicateurs (flags) peuvent préciser la manière
d'interpréter le motif ; le plus utilisé etant re.IGNORECASE (ou re.I) qui
permet de ne pas tenir compte de la casse des caractères dans la chaîne.
mark.h
>>> motifdate=re.compile('([0123]\d)/(\w{3})/(\d{4})',re.I)
L1 | Python (III) | p. 10
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières
●
Recherche de correspondances d'une expression dans une chaîne de
caractères :
●
re.match(motif,chaine[,flags]) : retourne un «objet» non-nul si la
chaîne commence par motif, ou None sinon.
>>> motifdate=re.compile('([0123]\d)/(\w{3})/(\d{4})',re.I)
>>> print re.match(motifdate,'20/oct/2011')
<_sre.SRE_Match object at 0xb7403a70>
>>> print re.match(motifdate,'20/octobre/2011')
mark.h
None
>>> print re.match(motifdate,'Nous sommes le 20/oct/2011')
None
●
re.search(motif,chaine[,flags]) : fonctionne comme re.match()
mais recherche le motif dans toute la chaîne.
>>> motifdate=re.compile('([0123]\d)/(\w{3})/(\d{4})',re.I)
>>> print re.search(motifdate,'Nous sommes le 20/oct/2011')
<_sre.SRE_Match object at 0xb7403a70>
L1 | Python (III) | p. 11
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières
●
Récupération des éléments de la chaîne correspondant aux éléments du
motif, à partir de l'objet (match) retourné par les fonctions de recherche :
●
●
match.groups() : retourne un tuple avec tous les éléments de la chaîne
correspondant au motif.
match.group(n) : retourne le n-ième élément du motif ayant une
correspondance dans la chaîne. L'argument (n) doit être compris entre 1 et le
nombre total d'éléments «capturés» dans le motif. Pour n=0, l'ensemble du
mark.h
motif est retourné.
>>> motifdate=re.compile('([0123]\d)/(\w{3})/(\d{4})',re.I)
>>> m=re.search(motifdate,'Nous sommes le 20/oct/2011')
>>> print m.groups()
('20','oct','2011')
>>> print m.group(0)
('20/oct/2011')
>>> print m.group(2)
'oct'
L1 | Python (III) | p. 12
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Les expressions régulières
●
Fonctions utilitaires :
●
re.split(m,c[,...]) : découpe la chaîne de caractères selon une
expression régulière.
>>> print re.split('[mts]on', 'Il a pris mon ordinateur, ton ecran, et son clavier.')
['Il a pris ',' ordinateur, ',' ecran, et ',' clavier.']
●
mark.h
re.sub(m,r,c[,...]) : retourne une chaîne de caractères identique à la
chaîne c où touts les motifs correspondant à m ont été remplacés par r.
>>> print re.sub('[ts]on','mon','Il a pris mon ordinateur, ton ecran, et son clavier.')
Il a pris mon ordinateur, mon ecran, mon clavier.
L1 | Python (III) | p. 13
Apprendre à Programmer en Python | Arguments de la ligne de commande
La ligne de commande
●
Format général d'une commande Unix :
moi@localhost:~/Documents$ tar ­c ­v ­f LBM2011.tar LBM2011
●
tar :commande (le programme,mark.h
l'éxécutable).
●
­c ­v : options de type «flag» (présents ou absents).
●
­f LBM2011.tar : option comprenant un argument.
●
LBM2011 : argument.
L1 | Python (III) | p. 14
Apprendre à Programmer en Python | Arguments de la ligne de commande
Accès à la ligne de commande en Python
●
●
●
●
L'interpréteur découpe la ligne de commande en mots.
Ces mots sont accessibles dans un tableau de chaînes de caractères dont
le nom est prédéfini : sys.argv
sys.argv[0] : contient le nom de la commande (Script Python).
sys.argv[1:] : contient les mots
correspondant aux options et aux
mark.h
arguments.
sys.argv[]
0
1
2
3
4
5
'tar'
'-c'
'-v'
'-f'
'LBM2011.tar'
'LBM2011'
L1 | Python (III) | p. 15
Apprendre à Programmer en Python | Arguments de la ligne de commande
Avantages/inconvénients de l'utilisation de la ligne de commande
●
La ligne de commande rend les programmes paramétrables :
●
●
Elle permet d'éviter de coder «en dur» certaines valeurs (noms des
fichiers de données en entrée/sortie).
Les arguments/options de la ligne de commande jouent le même rôle, pour
un programme, que les arguments pour les fonctions.
mark.h
●
L'utilisation de la ligne de commande nécéssite des vérifications
poussées des arguments et des options :
●
Les arguments obligatoires sont-ils présents ?
●
Y a-t-il des arguments non pris en compte ?
●
Les options qui requièrent des arguments en sont-elles pourvues ?
L1 | Python (III) | p. 16
Apprendre à Programmer en Python | Manipulation d'informations textuelles
Exercices
mark.h
L1 | Python (III) | p. 17
Téléchargement