Cours Pythons
Cours Pythons
php
1. Contexte du cours
Dans ce cours, nous passons d'abord en revue les éléments de base du langage Python,
en parallèle avec le langage de description vu en cours d'algorithmique (variables, types,
structures de contrôle, procédures et fonctions, etc.).
Nous nous focaliserons ensuite sur les traitements des textes à l'aide de Python : chaînes
de caractères, gestion des fichiers, expressions régulières, manipulation des documents
semi-structurés (XML) et traitement automatique des langues (TAL) avec le
module NLTK de Python.
Dans le langage Python, chaque instruction occupe une ligne : il n'y a pas de symbole de
fin, nous passons simplement à la ligne après chaque instruction. C'est la règle générale
mais nous verrons qu'il est possible d'écrire une chaîne de caractères ou une condition
sur plusieurs lignes pour une meilleure lisibilité du code Python.
Les blocs d'instructions ne sont pas délimités eux non plus par un symbole particulier
mais répérés par l'indentation des instructions :
des instructions qui sont dans le même bloc ont le même nombre d'espaces à leur
gauche,
pour marquer le début d'un nouveau bloc, on va rajouter quelques espaces par
rapport à l'instruction précédente.
Idéalement, il faut utiliser un éditeur qui, après un appui sur la touche tabulation du
clavier, amène le curseur à l'endroit adéquat en produisant le nombre d'espaces
nécessaires.
Syntaxe permettant d'écrire des commentaires dans le code Python : le signe # indique
que la suite de la ligne n'est pas destinée à Python mais à un lecteur humain. Nous
verrons que des commentaires bien formatés permettent aussi la production de la
documentation et des tests automatiques.
Types et variables
Python autorise la manipulation de types classiques : booléens (bool), entiers (int), réels
(float) et chaîne de caractères (str). À noter que les noms des types indiqués sont aussi
des opérateurs de conversion.
Comme suggéré ci-dessus, le symbole = est réservé à l'affectation d'une valeur à une
variable. Le symbole ==, lui, permet d'exprimer un test d'égalité qui ne modifie en rien
les variables.
Comme déjà évoqué, lorsque nous souhaiterons des conversions explicites d'un type à
l'autre, nous utiliserons str pour obtenir une chaîne de caractères (à partir d'un nombre)
et int pour obtenir un entier (à partir d'un texte par exemple).
Le plus simple des types complexes en Python se nomme tuple. Un tuple réunit plusieurs
éléments, éventuellement de types différents. La première opération sur ce type consiste
à former le tuple en emballant (packing) ensemble les différentes valeurs : il suffit de les
lister, séparées par des virgules et entourées par un jeu de parenthèses.
date = ("jeudi",8,"mai",2025)
coordonnées = (50.627584763903506,3.1273605914188045)
occurrence = ("chanterons","verbe","chanter")
binôme = ("fabien","delphine")
L'opération inverse, déballer le tuple pour récupérer ses éléments (unpacking), est assez
2 sur 38 15/07/2025, 21:21
Cours de programmation Python - Fabien Torre [Link]
puissante : elle permet d'obtenir plusieurs variables individuelles à partir d'un tuple.
(nom_jour,num_jour,mois,année) = date
(latitude,longitude) = coordonnées
(mot,catégorie,lemme) = occurrence
(livre,auteur,année,nb_pages) = ouvrage
(étudiant_1,étudiant_2) = binôme
Il est également possible de récupérer un élément d'un tuple, avec la syntaxe crochets :
Enfin, notons que toute modification est interdite sur un tuple : il est impossible
d'ajouter, modifier ou supprimer un élément dans un tuple. On dit en Python que ce type
est non mutable.
Opérateurs
salaire = 2000
augmentation = 7 * salaire / 100
Nous retrouvons également les habituels opérateurs logiques (and, or et not) pour
manipuler les booléens qui, en Python, sont notés True et False.
ok = False
ko = not(ok)
En Python, les chaînes de caractères doivent être délimitées, au choix, par des
apostrophes ou des guillemets.
"coucou hé !"
'ça va ?'
Les affichages sont réalisés à l'aide de l'instruction print() : elle affiche les éléments qui
lui sont confiés puis passe à la ligne, les éléments sont séparés par un espace.
Par ailleurs, l'instruction print nous permet deux observations sur les procédures en
Python :
Le si alors sinon introduit une condition et deux blocs d'instructions : le premier bloc
sera exécuté si la condition est vraie, le second si la condition est fausse. C'est l'occasion
d'observer le délimitation des blocs en Python qui utilise l'indentation, c'est-à-dire le
décalage et l'alignement des instructions d'un même bloc vers la droite.
# forme générale
if (une condition ici):
# ...
# des instructions ici
# ...
else:
# ...
# des instructions ici
# ...
Si l'on doit enchaîner plusieurs tests, Python propose elif en plus de if et de else :
# enchaînement de tests
temperature = 28
if temperature>25:
print('il fait chaud !')
elif temperature>20:
print('il fait bon.')
else:
print('il fait frais...')
Les elif peuvent être utilisés en nombre quelconque, ce qui permet de limiter
l'imbrication du code et donc d'augmenter sa lisibilité.
En Python, une condition doit s'exprimer sur une seule ligne mais, encore une fois pour
faciliter la lisibilité du code, il est possible de masquer la fin de ligne à l'aide du caractère
d'échappement backslash (signe \) et ainsi étaler des tests sur plusieurs lignes.
else :
On retrouve la boucle tant que avec sa condition et le bloc d'instructions à exécuter tant
que la condition est vraie, bloc indenté vers la droite.
# forme générale
while (une condition ici):
# ...
# des instructions ici
# ...
# exemple : on compte de 1 à 10
i = 1
while i<=10:
print(i)
i = i + 1
Dans une utilisation courante, la boucle for ... in ... parcourt un intervalle défini par
l'instruction range.
range peut prendre jusqu'à trois arguments entiers : début, fin et pas.
range va fournir les entiers depuis début, avancer de pas en pas et s'arrêter avant
fin.
début et pas sont optionnels, ils valent par défaut respectivement 0 et 1.
pas peut être négatif mais pas nul.
# forme générale
for i in range(début,fin,pas):
# ...
# des instructions ici
# ...
# on compte de 0 à 4
for i in range(5):
print(i)
# on compte de 1 à 10
for i in range(1,11):
print(i)
# on compte à rebours 5 à 0
for i in range(5,-1,-1):
print(i)
# affichage de 10 étoiles
for i in range(10):
print('*')
Une utilisation plus générale de cette boucle est possible, lorsque l'objet donné après le
in est itérable. C'est le cas du range et il en sera de même pour les chaînes de caractères et
pour les listes.
Procédures et fonctions
Les procédures et les fonctions ont en commun de rassembler des instructions pour des
réutilisations futures. Elles utilisent des paramètres pour généraliser le code. Une
fonction doit toujours se terminer par le renvoi d'un résultat (à l'aide du mot-clef return
en Python), ce qui n'est jamais le cas pour une procédure. Cela signifie en particulier
qu'un appel à une fonction se trouvera souvent dans la partie droite d'une affectation, en
revanche un appel à une procédure ne pourra pas être à cette position.
# appels à la procédure
carré(10,"·")
carré(5)
carré(symbole="o",taille=7)
Comme indiqué, une fonction se doit de renvoyer un résultat avec l'instruction return.
L'appel à cette fonction pourra se trouver dans la partie droite d'une affectation ou être
impliqué dans un test.
Enfin, il est possible en Python d'associer aux procédures et aux fonctions des
commentaires bien formatés qui permettent la production de documentation et des tests
automatiques.
Un module est un fichier qui regroupe des variables, des procédures et des fonctions,
pour que celles-ci puissent être utilisées dans des scripts Python différents. Plusieurs
syntaxes sont possibles pour charger ces modules et utiliser les procédures/fonctions en
provenance de ces modules.
Il peut devenir délicat de comprendre l'exécution d'un code Python si l'on importe une
variable ou une fonction depuis un module alors que notre propre code définit un objet
du même nom, avant ou après l'importation du module. Il est préférable d'utiliser les
espaces de noms (comme en XML) pour préciser systématiquement le module d'origine
d'une variable ou d'une fonction.
Voyons un exemple avec les fonctions mathématiques proposées par Python à travers le
module math.
Il est possible, à l'aide du mot-clef as, de définir alias au nom du module, plus court ou
plus informatif.
Nous verrons plus loin, en détail, des modules Python d'utilisation courante.
Syntaxe objet
En programmation objet, les variables embarquent en elles des caractéristiques qui les
décrivent (les propriétés de l'objet) et des procédures et fonctions qui permettent de les
traiter (les méthodes de l'objet).
Sur l'exemple suivant, nous voyons que les chaînes de caractères sont en Python des
objets, et que l'on peut s'adresser à leurs méthodes.
Nous retrouvons la syntaxe pointée et les espaces de noms vus avec les modules, mais
Dans le cas d'un fichier en écriture, le mode d'ouverture est noté w. Pour l'écriture
elle-même, nous avons choisi de conserver l'instruction print avec précision du flux dans
lequel écrire.
Concernant un fichier en lecture, le mode à utiliser est noté w. Nous mettons ensuite
en œuvre une boucle tant que pour lire le fichier ligne par ligne. Cela se fait avec
l'opérateur morse (walrus operator) de Python : celui-ci permet l'affectation d'une
valeur à une variable dans une expression plus large, par exemple dans le test d'un if ou
d'un while. Ici il nous permet de tester s'il reste des lignes à lire dans le fichier et de
récupérer la prochaine ligne en même temps. Chaque ligne est obtenue avec la
commande readline (notons qu'une ligne arrive logiquement avec, pour la terminer, le
caractère de fin de ligne).
Nous verrons qu'il est aussi possible de capter en Python le flux produit par un autre
programme en train de s'exécuter (avec l'instruction popen du module os).
Le langage Python permet de délimiter les chaînes de caractères soit par des
apostrophes, soit par des guillemets. Il est pratique d'utiliser les guillemets lorsque le
texte contient une apostrophe, et vice-versa.
prénom = 'Toto'
print("salut",prénom)
print("ça va aujourd'hui ?")
# deux variables qui contiennent la même chaîne de caractère : 'Voici un backslash protégé : \\ ok
info_1 = "Voici un backslash protégé : \\ ok ?"
info_2 = r"Voici un backslash protégé : \ ok ?"
Ces raw strings seront particulièrement pertinentes quand nous aurons à écrire des
expressions régulières.
Il y aussi en Python les chaînes formatées, préfixées par la lettre f. Elles permettent
d'abord d'embarquer des expressions Python dans les chaînes de caractères. Ces
expressions sont placées entre accolades, elles sont évaluées et le résultat remplace les
accolades et leur contenu dans la chaîne. À noter les expressions particulières qui se
terminent par le symbole égal (=).
prénom = "Fabien"
f"Je m'appelle {prénom}." # "Je m'appelle Fabien."
f"Je m'appelle {pré[Link]()}." # "Je m'appelle FABIEN."
f"{pré[Link]() = }" # "pré[Link]() = 'fabien'"
Dans les chaînes formatées, il est possible d'ajouter des indications de formatage
pour chaque expression entre accolades. Le format souhaité se place lui aussi dans les
accolades : à la suite de l'expression à évaluer, en les séparant par le caractère « deux
points » (:). Ces formats permettent de spécifier des alignements, des séparateurs, des
places occupées, des conversions, etc.
"""coucou
ça va ?
ou bien ?
"""
# c'est la chaîne de caractères 'coucou\nça va ?\nou bien ?\n'
Nous verrons plus loin une méthode plus pertinente, basée sur l'ordre alphabétique de la
langue manipulée.
Sur les chaînes de caractères, nous trouvons l'opérateur de concaténation noté par
un plus (symbole +, comme pour l'addition entre entiers) et un opérateur de
répétition des chaînes avec un fois (symbole *, comme pour la multiplication entre
entiers).
température = 25
len("héhéhé") # 6
len("coucou")+len("Fabien") # 12
len("coucou"+"Fabien") # 12
température = 25
texte = 'La variable « température » vaut ' + str(température)
len(texte) # 35
prénom = "Fabien"
print(prénom[0]) # "F"
print(prénom[5]) # "n"
prénom = "Fabien"
print(prénom[0:2]) # "Fa"
print(prénom[5:6]) # "n"
# début et fin sont optionnels et ont donc des valeurs par défaut
print(prénom[2:]) # "ien"
print(prénom[:3]) # "Fab"
print(prénom[:]) # "Fabien"
print(prénom[::-1]) # "neibaF"
Les chaînes de caractères en Python ne sont pas modifiables. Il est donc impossible
d'utiliser la syntaxe « crochets » pour modifier un caractère particulier dans une chaîne.
Toute modification implique alors la création d'une nouvelle chaîne de caractères. Ainsi,
modifications/suppressions dans les chaînes de caractères passent par les
opérations déjà vues (concaténation et multiplication), ou par l'extraction des parties à
conserver avec des slices suivie de la construction d'une nouvelle chaîne.
Éventuellement, la nouvelle chaîne peut être stockée dans la variable d'origine.
Ci-dessous, quelques méthodes des chaînes de caractères qui nous seront utiles.
# texte sur plusieurs lignes puis nettoyage des espaces au début ou à la fin
texte = """
coucou
bonjour chez vous !
"""
[Link]() # "coucou\nbonjour chez vous !"
[Link]() # "coucou\nbonjour chez vous !\n\n"
[Link]() # "\n coucou\nbonjour chez vous !"
# remplacement
[Link]("e","X") # "JX m'appXllX FabiXn.
La méthode rsrtip sera particulièrement utile lors de la lecture d'un fichier, pour enlever
les caractères de fin de ligne.
Pour effectuer, le parcours d'une chaîne de caractères nous retrouvons une boucle
for ... in ... :
Plus proche de la méthode algorithmique, il est possible de boucler sur les indices des
caractères et d'y accéder à l'aide de la notation « crochets » ([]). Mais cela est jugé peu
« pythonique ».
Nous avons vu en cours d'algorithmique différentes méthodes qui parcourt une chaîne
de caractères (ou un tableau d'éléments quelconques), afin de déterminer si un
caractère particulier est présent dans la chaîne ou non. En Python, nous
pouvons naturellement implémenter ces algorithmes mais il existe déjà à cette fin
l'opérateur Python in (lequel est probablement basé sur l'un des algorithmes étudiés).
# opérateur in dans un if
mot = "chanter"
if "a" in mot:
print("«",mot,"» contient un a.")
else:
print("«",mot,"» NE contient PAS de a.")
Nous verrons d'autres instructions qui utilisent les chaînes des caractères au cours de
l'apprentissage des listes.
En Python, il n'y a pas de contrainte sur le contenu des cases, en particulier ces contenus
ne sont pas nécessairement du même type. Les cases sont numérotées à partir de 0. Il y a
différentes manières de créer une liste et de lui affecter des valeurs.
# liste obtenue à partir d'un intervalle décrit par range (entiers de 1 à 10)
premiers = list(range(1,11)) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
On note d'emblée une différence par rapport aux chaînes de caractères : on peut
modifier les listes, on dit qu'elles sont « mutables ».
Nous retrouvons l'instruction len qui cette fois fournit la taille d'une liste.
Python propose plusieurs syntaxes pour parcourir une liste, toutes basées sur la
boucle for in.
Afin de tester la présence d'un élément dans une liste, nous retrouvons
l'opérateur in déjà vu sur les chaînes de caractères.
notes = [5,12,9,20,12,10]
# opérateur in dans un if
if 20 in notes:
print("Quelqu'un a eu 20/20.")
else:
print("Personne n'a eu 20/20.")
Reste à discuter des liens entre listes et chaînes de caractères. Il est facile de voir
une chaîne de caractères comme une liste de caractères, et effectivement Python met en
commun certaines opérations. Mais nous avons déjà noté que les listes étaient mutables,
ce qui n'est pas le cas des chaînes de caractères.
L'opérateur + permet de fusionner des listes, tandis que l'opérateur * les répètent.
Terminons avec deux opérations intéressantes qui font le lien entre listes et chaînes de
caractères :
séparateur = "-"
sé[Link](mots) # concaténation avec une variable pour stocker le séparateur
Un ensemble, set en Python, est comme son nom l'indique une collection d'éléments,
non ordonnée et sans doublon.
avec le constructeur set() pour définir un ensemble vide ou à partir d'un objet d'un
autre type,
avec les accolades (symboles {}) pour définir explicitement un ensemble d'au
moins un élément.
Python met à disposition des méthodes sur les ensembles pour ajouter et supprimer des
éléments. Naturellement, nous avons aussi les opérations ensemblistes usuelles. Enfin,
nous retrouvons len pour connaître le nombre d'éléments présents dans un ensemble.
Nous pouvons parcourir les ensembles Python, simplement avec une boucle for
... in ..., mais
sans garantie sur l'ordre d'apparition des éléments.
Terminons avec l'opérateur in qui permet ici de tester si un élément est présent un
ensemble.
Dans la section suivante, nous discutons de cet opérateur in dans le contexte des
ensembles, ainsi que d'une utilisation possible.
Rappelons que l'opérateur in fonctionne sur les chaînes de caractères, sur les listes et sur
les ensembles. De plus, la syntaxe Python seule ne permet pas toujours de distinguer au
premier coup d'œil si l'opérateur in travaille sur une liste ou sur un ensemble.
Cependant, ce sont des algorithmes bien distincts qui sont utilisés dans chacun de ces
cas et les performances sont bien différentes.
Illustrons cela avec le cas où l'on souhaite tester la présence d'un mot dans une
liste de mots. Il s'agit par exemple de faire de la vérification orthographique. Dans ce
cas, nous avons besoin d'une liste de mots français autorisés. Si celle-ci est stockée dans
un fichier, il suffit de la lire et de la charger dans un ensemble Python.
flux_dico = open('[Link]',mode='r',encoding="utf-8")
flux_dico.close()
Nous pouvons maintenant tester simplement l'existence d'un mot dans l'ensemble créé,
à l'aide de l'opérateur in.
Remarquons que ce code est exactement le même, que liste_mots soit une liste Python
ou un ensemble Python (avec des temps de calcul bien différents comme on l'a dit).
Un dictionnaire peut être défini à vide ou avec des valeurs explicites, dans les deux cas
on utilise des accolades (symboles {}) (pour distinguer les dictionnaires des listes qui
utilisent les crochets). Il existe également le constructeur dict pour obtenir un
dictionnaire à partir d'une liste de couples clef/valeur.
Pour récupérer le contenu d'une case, on retrouve la syntaxe crochets (avec une clef
entre les crochets).
print(carnet['Toto']) # [Link]@[Link]
print(carnet['Lulu']) # KeyError: 'Lulu'
Terminons avec l'opérateur in qui permet ici de tester si une clef existe dans un
dictionnaire.
Cet opérateur in a déjà été vu dans le cas des chaînes de caractères, des listes et des
ensembles. L'algorithme sous-jacent dans le cas des dictionnaires est proche de celui
déjà utilisé pour les ensembles, et il a la même rapidité.
Nous terminons avec une utilisation possible des dictionnaires Python : compter les
occurrences des mots dans un corpus. Nous voulons donc obtenir un compteur
associé à chaque mot. Nous utilisons à cette fin un dictionnaire Python avec les mots en
clefs et les compteurs comme valeurs. À la rencontre d'un mot, nous allons mettre à jour
son compteur comme suit.
compteurs[mot] = [Link](mot,0) + 1
Comme nous le voyons, la méthode get permet en une même ligne de gérer deux
situations distinctes :
si le mot est rencontré pour la première fois, il est absent des clefs du dictionnaire
Python, get fournit alors la valeur par défaut 0, à laquelle nous ajoutons 1 et
finalement le dictionnaire mémorise que nous avons vu ce mot une fois ;
lors des rencontres ultérieures du même mot, get trouve le mot parmi les clefs et
fournit la valeur associée dans le dictionnaire, valeur qui est incrémentée pour
noter que le mot a été vu une fois de plus.
Nous notons avec cet exemple que le get commence par un test d'existence semblable au
in (sur les
dictionnaires, donc notre comptage bénéficie de la rapidité de cet opérateur).
Cependant il est également possible d'obtenir des listes ordonnées en appliquant sorted
aux autres objets Python que nous avons vus : les chaînes de caractères, les ensembles et
les dictionnaires.
reverse est un booléen qui dit si l'on doit inverser ou non le sens du tri,
key permet de préciser une fonction à appliquer aux objets, ils sont alors ordonnés
selon leurs résultats par la fonction donnée.
Commençons par trier des listes, par copie ou sur place, comme nous l'avons indiqué.
Comment trier les éléments d'un ensemble ? Par définition, les ensembles sont non
ordonnés mais l'on peut trier les éléments d'un ensemble pour obtenir une liste
ordonnée. Cette fois, si l'on revient à un ensemble, on perd bien sûr l'ordre défini par le
tri.
Comme les ensembles, les dictionnaires n'ont pas d'ordre et trier un dictionnaire
revient à utiliser sorted pour récupérer une liste ordonnée des clefs, clefs qui resteront
un bon point d'entrée vers le dictionnaire d'origine. Par défaut sorted va trier un
dictionnaire selon ses clefs.
Si l'on veut trier un dictionnaire selon ses valeurs, il nous faut revenir sur le
paramètre key et introduire la notion de fonction lambda. On a vu l'utilisation de la
fonction len sur des chaînes de caractères pour les trier par taille. On a vu également la
fonction str sur des entiers, pour les trier comme des chaînes de caractères, c'est-à-dire
par ordre alphabétique. Parfois, la fonction à utiliser n'est pas prédéfinie en Python et
l'on ne souhaite pas la créer avant le tri. Dans ce cas, Python permet de définir une
fonction lambda, laquelle nous dispense du mot clef def, du nommage de la fonction, du
return, etc.
Une telle fonction lambda peut être placée directement dans le paramètre key. Cela nous
permet finalement d'ordonner les clefs d'un dictionnaire selon les valeurs associées, avec
une fonction lambda qui à partir d'une clef renvoie la valeur associée dans le
dictionnaire. À nouveau, on obtient une liste de clefs triée par ordre des valeurs, liste que
l'on peut parcourir tout en accédant au dictionnaire.
Rappelons que les tris alphabétiques que nous venons de mettre en œuvre sont basés les
codes UNICODE des caractères et pas sur la langue utilisée. Pour trier
alphabétiquement, il nous faudra combiner les techniques vues dans cette section et
l'utilisation du module locale.
Nous avons déjà vu comment bénéficier d'un module dans un code Python. Sont décrits
ci-dessous quelques modules pertinents pour nos objectifs.
Exemples :
>>> nom_d_agent('chanter')
'chanteur'
L'implication du module doctest permet de surcroît de lancer les tests qui apparaissent
dans la documentation. Chacun de ces tests est préfixé par trois signes supérieurs (>>>)
et la ligne suivante présente le résultat attendu.
import doctest
[Link]()
TestResults(failed=0, attempted=2)
[Link](verbose=True)
Trying:
nom_d_agent('chanter')
Expecting:
'chanteur'
ok
Trying:
nom_d_agent('danser') == 'danseur'
Expecting:
True
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.nom_d_agent
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
TestResults(failed=0, attempted=2)
import random
print(notes)
[Link](notes) # mélange aléatoire, sur place
print(notes)
La fonction [Link] permet de tester si une expression régulière matche ou non une
chaîne de caractères.
import re
texte = "beau"
import re
verbe = "chanter"
La fonction [Link] est utile pour effectuer une substitution, c'est-à-dire remplacer un
motif par une nouvelle chaîne de caractères. Ici encore, il est possible de repérer et de
récupérer des sous-chaînes matchées. Cette fois, nous pouvons les réutiliser
immédiatement à l'aide de variables numérotées (préfixées par un backslash).
import re
verbe = "chanter"
nom = [Link]("er$","eur",verbe) # remplacement d'une terminaison
print(verbe,"donne",nom) # chanter donne chanteur
import re
Précisons que l'insensibilité à la casse des méthodes évoquées peut être demandée de
deux manières. Au choix :
Le module termcolor permet aussi de produire une chaîne de caractères colorée, sans
l'afficher, à l'aide de la fonction colored.
import locale
Nous avons vu que les tris alphabétiques n'étaient pas réellement efficients, car basés sur
les codes UNICODE et pas sur l'alphabet du pays. Le module locale fournit deux
fonctions qui permettent de résoudre cette difficulté :
strcoll : fonction à deux paramètres, renvoie une valeur négative si le premier mot
est avant le deuxième dans l'ordre alphabétique,
strxfrm: transforme un mot en une nouvelle chaîne de caractères qui pourra être
comparée à d'autres obtenues de la même manière, les comparaisons standards
donneront alors des réponses conformes à l'ordre alphabétique régional, pour les
chaînes de caractères de départ.
import locale
[Link](locale.LC_ALL,"")
DOM est un modèle de document construit en mémoire à la lecture d'un fichier XML,
modèle que l'on peut interroger. Nous nous concentrons ici sur le noyau de DOM
fournissant des méthodes valables pour tout document XML (en particulier, des
documents non-HTML). Nous devenons capables d'interagir avec un fichier XML
à l'aide de DOM. Ici un script Python qui compte les personnages dans un fichier XML
TEI.
Plus de détails sur l'API DOM dans le cours sur les interfaces XML.
déclenchées par la survenue d'événements pendant la lecture d'un fichier XML : début
du document, ouverture ou fermeture d'une balise, rencontre d'une feuille textuelle, etc.
À l'inverse de DOM, SAX ne stocke rien en mémoire, il lit séquentiellement le fichier
XML et réagit aux événements. Il nous reste à programmer le comportement à avoir
pour chaque événement.
class TEIHandler(ContentHandler):
def __init__(self):
self.compte_persos = {}
self.pers_encours = False
def startDocument(self):
"""ce que l'on fait au début du document"""
print("> lecture du document : début")
def endDocument(self):
"""ce que l'on fait à la fin du document"""
print("> lecture du document : fin")
for perso in sorted(self.compte_persos,key=lambda p: self.compte_persos[p]):
print(self.compte_persos[perso],end="\t",perso)
Plus de détails sur l'API SAX dans le cours sur les interfaces XML.
import nltk
À partir d'un tel texte, il est possible de le découper selon différents critères proposés par
le module nltk.
# découpage en phrases
phrases = nltk.sent_tokenize(paragraphe,language="french")
print()
for phrase in phrases:
print(phrase)
print()
print(tokens_étiquetés)
contextes ;
common_contexts : trouve les contextes communs à une liste de mots fournie.
import os
Autre fonction intéressante : [Link] fournit la liste des fichiers dans un dossier
donné.
import os
import sys
Notons enfin la fonction [Link] qui nous autorise à récupérer le flux produit par un
autre programme en cours d'exécution.
import os
import sys
[Link](2000)
import time
t1 = time.process_time()
...
# ici les instructions à chronométrer
...
t2 = time.process_time()
# programme principal
speed(5) # réglage de la vitesse
carré(-100,-100,100)
carré(100,100,200)
carré(190,100,20)
Voir aussi...