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) % Programmation avec Python (chapitre 4)
% Dimitri Merejkowsky % Dimitri Merejkowsky



#

\center \huge Les tuples \center \huge Les tuples


# Création de tuples # Création de tuples
@@ -209,7 +212,7 @@ def exemple_bizarre(l=[1, 2, 3]):
[1, 2, 3, 4, 4] [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) # 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 # Itérer sur les clés
@@ -376,7 +379,7 @@ signé Alice
# Par mail - envoi 2 # Par mail - envoi 2


```text ```text
Bonjour Alice, voici une nouvelle version de mes changements
Bonjour Alice, voici le code corrigé:


def ma_fonction(): def ma_fonction():
ma_liste = ... ma_liste = ...
@@ -390,11 +393,15 @@ def ma_fonction():
Croyez-le ou nom, plein de projets fonctionnent comme ça. Croyez-le ou nom, plein de projets fonctionnent comme ça.


Pas d'outil spécifiques, on peut tout faire avec des e-mail 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 # 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é 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 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)