... | ... | @@ -51,8 +51,13 @@ On verra si nécessaire comment définir proprement une interface, mais cela sor |
|
|
#### b) Ouvrir le fichier et le lire ligne par ligne
|
|
|
|
|
|
Un code vous est déjà proposé.
|
|
|
Pratique recommandée pour ouvrir un fichier : "**with** open(nom_fichier, 'r') as alias_du_fichier"
|
|
|
=> **with** introduit un **"context manager"** qui garantit que le fichier se fermera à la fin du bloc d'instructions, quoi qu'il arrive.
|
|
|
Pratique recommandée pour ouvrir un fichier : "**with** open(nom_fichier, 'r') as alias_du_fichier".
|
|
|
|
|
|
:baby: Si vous débutez : retenez que cette syntaxe est fortement recommandées ; si vous utilisez une autre façon de faire vous devrez bien penser à fermer le fichier à la fin.
|
|
|
:older_man: Si vous être plus avancé,retenez la notion de **context manager**
|
|
|
=> **with** introduit un **"context manager"** qui déclenche une action définie par la méthode __start__ de la classe avant la première instruction, et une dernière action définie par __end__ à la fin. Ici, l'action finale est la fermeture du fichier, ce qui garantit que le fichier se fermera à la fin du bloc d'instructions, quoi qu'il arrive. Cela rappelle les décorateurs, sauf qu'ici on peut choisir d'appeler la classe avec un context manager ou pas, alors que les décorateurs modifient définitivement la fonction (surcharge).
|
|
|
On peut par exemple définir un context manager pour mesurer le temps d'exécution d'une fonction (au début : on note l'heure ; à la fin : on note l'heure et on calcule le délai).
|
|
|
|
|
|
Ensuite, on va lire les lignes avec alias_du_fichier.readline().
|
|
|
Dans le code proposé, on va d'abord lire les lignes une à une jusqu'à en trouver une qui contienne un mot-clé.
|
|
|
Ensuite, on lit toutes les autres grâce à une simple boucle **for ligne_lue in alias_du_fichier**, qui lira les lignes une par une jusqu'à la fin. Grâce au context manager, le fichier sera fermé proprement à la fin du bloc de code.
|
... | ... | |