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