From ccc61a99e53022ec480ceaeb11d1cd3885aa42f1 Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Sat, 19 Jan 2019 11:20:12 +0100 Subject: [PATCH] stuff about files (optional) --- sessions/python-04.md | 97 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 90 insertions(+), 7 deletions(-) diff --git a/sessions/python-04.md b/sessions/python-04.md index bb20ae1..b869ff7 100644 --- a/sessions/python-04.md +++ b/sessions/python-04.md @@ -1,6 +1,9 @@ % Programmation avec Python (chapitre 4) % Dimitri Merejkowsky + +# + \center \huge Les tuples # Création de tuples @@ -209,7 +212,7 @@ def exemple_bizarre(l=[1, 2, 3]): [1, 2, 3, 4, 4] ``` -* Les arguments par défaut ne sont évalué qu'une seule fois) +* Les arguments par défaut ne sont évalué qu'une seule fois # Valeur par défaut (2) @@ -253,7 +256,7 @@ mutables. # -\center Itérer sur les dictionnaires +\center \huge Itérer sur les dictionnaires # Itérer sur les clés @@ -376,7 +379,7 @@ signé Alice # Par mail - envoi 2 ```text -Bonjour Alice, voici une nouvelle version de mes changements +Bonjour Alice, voici le code corrigé: def ma_fonction(): ma_liste = ... @@ -390,11 +393,15 @@ def ma_fonction(): Croyez-le ou nom, plein de projets fonctionnent comme ça. Pas d'outil spécifiques, on peut tout faire avec des e-mail -et du texte brut +et du texte brut. + +Et c'est souvent comme ça qu'on contribue à du code open-source. # D'autres outils -Des outils essayent de "simplifier" le processus. En vrac: `gerrit`, `github`, `gitlab` ... +Des outils essayent de "simplifier" le processus. En vrac: `gerrit`, `github`, `gitlab`, `bitbucket`, `phabricator` ... + +\vfill Mais dans son essence le concept n'a pas changé @@ -426,6 +433,82 @@ Vous pouvez lire *Les Mots du Président* si ça vous dit. Il utilisait d'autres outils, bien sûr, mais ce qu'on va faire n'est pas si loin -# Squelette du code +# + +\center \huge Let's go! + +# + +# + + +\center \huge Lire et écrire des fichiers + +# Rappel: lire + +```python +file = open("toto.txt", "r") # 'r' comme 'read' +contenu = file.read() +file.close() +``` + +Note: le fichier `toto.txt` doit exister! + +# Écrire + +On peut écrire tout le contenu d'un coup: + +```python +contenu = "du texte à sauvegarder" +file = open("article.txt", "w") # 'w' comme 'write' +file.write(contenu) +file.close() +``` + + +* Le fichier `article.txt` sera écrasé s'il existe déjà. +* N'oubliez surtout pas d'appeler `close()` + +# Que faire en cas d'erreur ? + +```python +file = open("article.txt", "w") # 'w' comme 'write' +# ... beacoup de code ici +# ... < une erreur +file.close() +``` + +S'il y a une erreur entre `open()` et `close()`, le fichier ne sera pas fermé! + + +# Le mot-clé with + +```python +with open("toto.txt", "w") as file: + file.write("du texte") +``` + +Quand on sort du bloc `with` on a la garantie que `file.close()` sera appelé, +*même* si on sort du bloc à cause d'une erreur. + +# Convention + +Il n'y a maintenant plus aucune raison d'appeler `.close()` "à la main", +donc ne le faites pas ... + +# Lire et écrire des lignes + +Très courant: + +```python +with open("toto.txt", "r") as file: + lignes = file.readlines() + +# faire quelque chose avec la liste de lignes + +with open("toto.txt", "w") as file: + file.writelines(lignes) +``` -Parlons-en! +Pensez à fermer le premier fichier avant d'ouvrir le second. +(ça marche même s'ils ont le même nom)