Browse Source

stuff about files (optional)

master
Dimitri Merejkowsky 5 years ago
parent
commit
ccc61a99e5
1 changed files with 90 additions and 7 deletions
  1. +90
    -7
      sessions/python-04.md

+ 90
- 7
sessions/python-04.md View File

@@ -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)