Cours avancé de développement Python
Chapitre
>
Niveau
Modules de chaîne et de temps
Module Regex
Objectif
Vérifiez et organisez les fichiers concernant les employés et les affectations de zones en utilisant des expressions régulières.
Dans les bureaux voisins, il y a une documentation qui doit être mise à jour concernant les employés débutant leur travail sur la nouvelle terre agricole et le zonage pour l'entretien des cultures et du bétail. La gestion des fichiers peut être assez compliquée, surtout lorsqu'on manipule de grandes quantités de texte. Pour cela, nous utiliserons le module re, qui est l'abréviation des Expressions Régulières, également appelé Regex. Nous pouvons accéder à ses fonctions en utilisant import re, et pour ce niveau, nous utiliserons les fonctions suivantes :
re.findall(): Renvoie une liste de toutes les occurrences d'une chaîne. Prend deux (2) arguments, le premier correspond aux caractères recherchés dans une chaîne, le second est la chaîne dans laquelle effectuer la recherche.re.sub(): Remplace l'occurrence indiquée par une certaine chaîne. Prend trois (3) arguments, le premier indique quels caractères vous souhaitez remplacer, le deuxième est ce par quoi vous souhaitez les remplacer et le troisième est la chaîne dans laquelle effectuer la recherche.re.search(): Trouve l'emplacement de quelque chose dans une chaîne, renvoie un objet. Prend deux (2) arguments, les caractères que vous recherchez et la chaîne dans laquelle effectuer la recherche. Vous pouvez utiliser d'autres fonctions avec l'objet renvoyé, commespan()qui retourne un vecteur des positions de début et de fin de l'élément recherché dans le texte.re.split(): Divise une chaîne en une liste à des intervalles spécifiés. Prend deux (2) arguments, le premier indique par quel séparateur diviser la chaîne et le second est la chaîne à diviser.re.match(): Vérifie si une chaîne contient une certaine valeur au début. Cela fonctionne comme une version simplifiée de la fonctionre.search(), mais est plus efficace et vérifie si la chaîne dans laquelle vous effectuez la recherche commence par la requête.
Le module re peut également utiliser des séquences spéciales ; il existe des codes que vous pouvez utiliser avec les fonctions re permettant d'englober une variété de propriétés de chaînes. Il existe une longue liste de séquences spéciales, mais pour ce niveau, nous utiliserons les suivantes :
\B: Vérifie si les caractères spécifiés se trouvent dans la chaîne sans être situés au début ou à la fin d'un mot.\D: Renvoie les caractères qui ne sont pas des chiffres de 0 à 9
Si un r est présent avant une séquence spéciale, cela signifie que la chaîne est considérée comme une chaîne brute.
Commencez par vous rendre vers la marque en X dorée et faire face à la table où se trouve la note ; utilisez la fonction read() pour lire la note qui contient un manifeste de tous les employés. Chaque nom contient # qui délimite leur numéro d'employé, la chaîne contenant les noms est également stockée dans une constante nommée manifest.
Créez une liste nommée tags et stockez-y la valeur de re.findall(), utilisée pour rechercher tous les # dans la constante manifest, comme ceci : tags = re.findall("#", manifest). Créez une variable nommée number et utilisez la fonction len() sur la liste tags pour compter le nombre d'éléments dans la liste, ce qui nous indiquera combien d'employés figurent dans le manifeste. Utilisez la fonction speak() avec la variable number pour annoncer combien de noms se trouvent dans la liste.
Ensuite, rendez-vous vers la marque en X claire à côté du tapis bleu et faites face au bureau, puis utilisez la fonction read(). Vous y trouverez une liste des nouvelles recrues avec leurs postes attribués. Notez les noms de chaque profession afin de pouvoir les comparer avec les personnes actuellement affectées. Rendez-vous ensuite vers la marque en X sur le tapis bleu et utilisez à nouveau read() pour vérifier les postes actuellement assignés.
La main-d'œuvre actuelle est stockée dans une constante nommée assignments. Nous devons mettre à jour ce document avec les informations figurant dans la liste des nouvelles recrues. Remplacez les noms qui diffèrent dans la liste en utilisant la fonction re.sub() pour substituer une partie de la chaîne par une autre. Par exemple, l'une des modifications est la suivante:
assignments = re.sub("Billy Hodgins", "Carol Hopkins", assignments)
Le nom "Billy Hodgins" est remplacé par "Carol Hopkins" dans le document. Mis à part ce changement, parcourez le document et mettez à jour ce nom ainsi qu'un autre nom dans la liste pour mettre entièrement à jour le document. Utilisez la fonction write() avec assignments pour vérifier les résultats.
Maintenant que nous avons pris en charge les listes d'employés, il est temps de passer au zonage de la ferme. Rendez-vous vers la marque en X sombre sur le tapis rouge et utilisez la fonction read(), cela vous montrera un examen détaillé du zonage. Ces informations sont stockées dans une constante nommée zones.
Il est particulièrement important d'identifier l'emplacement de 6210 dans le document, car cette zone doit être réévaluée. Pour ce faire, nous devons utiliser la fonction re.search() pour identifier l'emplacement de ce numéro de secteur dans le zonage. Créez une variable nommée index et affectez-y l'objet de recherche, en définissant la recherche sur r"6210\B". Ce que cela fait, c'est que le r indique une chaîne brute, le 6210 est le secteur de zone recherché, et le \B est le critère de séquence spéciale pour la recherche. Ceci est réalisé de la manière suivante : index = re.search(r"6210\B", zones).
Maintenant que index contient un objet de recherche, il est temps d'en extraire des données en utilisant span(). Créez une variable nommée vector et stockez-y l'emplacement de l'objet de recherche, comme ceci : vector = index.span(). Une fois configuré, utilisez la variable vector avec la fonction write() pré-écrite.
Ensuite, nous allons identifier les éléments du zonage. Rendez-vous vers la marque en X sombre sur le tapis vert. Créez une liste nommée sectors et utilisez la fonction re.split() pour regrouper tous les différents secteurs de zonage dans une liste. Dans la fonction split, utilisez la séquence spéciale "\D" pour ne prendre que les chiffres à partir de la variable zones. Utilisez une compréhension de liste pour supprimer les espaces vides dans la liste en utilisant la fonction len() afin d'éliminer les éléments trop petits pour être un numéro de secteur. Comme ceci:
sectors = re.split("\D", zones) sectors = [x for x in sectors if len(x) > 3]
Utilisez zones avec la fonction write() pour afficher tous les secteurs de zonage.
Rendez-vous à la marque en X claire à côté du tapis violet et faites face au classeur, utilisez la fonction read() pour vérifier les secteurs prioritaires dans le zonage de la ferme. Prenez note des secteurs car nous devons vérifier si ces secteurs se trouvent dans la liste de zonage.
Rendez-vous à la marque en X sombre sur le tapis violet. Il y a trois (3) secteurs prioritaires dans des variables nommées : sector_a, sector_b, sector_c, pré-écrites dans l'éditeur de code. Insérez les valeurs que vous avez lues à la marque en X claire. Ces variables utilisent une compréhension de liste qui parcourt tous les éléments de la liste sectors et les filtre à travers la fonction re.match(). Utilisez les variables sector_a, sector_b, sector_c et insérez-les dans la fonction write() pré-écrite afin de terminer le niveau.