4. Entrée/sortie

Un programme informatique doit souvent pouvoir interagir avec l’extérieur. Il existe plusieurs manières de faire cela :

  • soit en interagissant directement avec l’utilisateur : celui-ci peut rentrer des données grâce au clavier ou voir le résultat du programme s’afficher à l’écran ;

  • soit au moyen de fichiers : le programme peut lire des informations dans des fichiers ou au contraire écrire des résultats dans des fichiers.

4.1. Interaction directe avec l’utilisateur

L’interpéteur IPython affiche par défaut le résultat d’une expression non évaluée à None. Ce n’est pas le cas lorsque l’on exécute un script Python. Si l’on veut afficher des résultats à l’écran, il faut explicitement utiliser la fonction print.

Dans cet exemple, on exécute le script stocké dans le fichier script_print.py.

'titi'          # Cette ligne n'affiche rien
print('toto')
$ python script_print.py
toto

Inversement lorsque l’on souhaite demander une information à l’utilisateur, on utilise la fonction input. Celle-ci interrompt l’exécution du programme, ce qui permet à l’utilsateur d’entrer des caractères au clavier. Pour terminer sa saisie, l’utilisateur appuie alors sur la touche Entrée. La fonction input renvoie alors la chaîne de caractères entrée par l’utilisateur et l’exécution du programme reprend son cours. On peut également fournir en argument optionnel à la fonction input un message à destination de l’utilisateur qui sera affiché avant que celui-ci commence à saisir des caractères au clavier.

In [1]: result = input('Quel est votre nom ?')
Quel est votre nom ?
# Ici l'utilisateur a entré Toto
In [2]: result
Out[2]: 'Toto'

4.2. Fichiers

Pour ouvrir un fichier, on utilise la fonction open en donnant en argument le chemin du fichier. On peut préciser plusieurs paramètres optionnels.

mode

Mode d’ouverture du fichier : essentiellement 'r' pour lecture, 'w' pour écriture et 'r+' pour lecture/écriture. Par défaut, un fichier est ouvert en lecture seulement.

encoding

Encodage [1] du fichier : de nombreux encodages sont disponibles comme 'utf8' (à privilégier) ou 'ascii'.

In [3]: f = open('test.txt', mode='r', encoding='utf8')

In [4]: f
Out[4]: <_io.TextIOWrapper name='test.txt' mode='r' encoding='utf8'>

In [5]: type(f)
Out[5]: _io.TextIOWrapper

Avertissement

Le mode d’écriture 'w' crée un nouveau fichier si un fichier du même nom n’existe pas mais « écrase » un fichier existant dans le cas contraire.

L’objet renvoyé par open dispose d’une méthode close pour fermer le fichier. On ne pourra alors plus lire ou écrire dedans.

In [6]: f.close()

L’objet renvoyé par open dispose de plusieurs méthodes permettant de lire ou d’écrire dans le fichier ouvert.

On utilisera pour les exemples le fichier test.txt suivant.

Première ligne
Deuxième ligne
Troisième ligne

Dans les exemples suivants, le caractère n désigne un retour à la ligne.

In [7]: f = open('test.txt', mode='r', encoding='utf8')

# Renvoie l'intégralité d'un fichier
In [8]: f.read()
Out[8]: 'Première ligne\nDeuxième ligne\nTroisième ligne\n'

In [9]: f.close()

In [10]: f = open('test.txt', mode='r', encoding='utf8')

# Renvoie la liste des lignes
In [11]: f.readlines()
Out[11]: ['Première ligne\n', 'Deuxième ligne\n', 'Troisième ligne\n']

In [12]: f.close()

In [13]: f = open('toto.txt', mode='w', encoding='utf8')

In [14]: f.write("Ce qui se conçoit bien s'énonce clairement\n")
Out[14]: 43

In [15]: f.write("Et les mots pour le dire viennent aisément.\n")
Out[15]: 44

In [16]: f.close()

On vérifie que le fichier toto.txt a bien été créé et que son contenu correspond bien à ce qu’on y a écrit.

Ce qui se conçoit bien s'énonce clairement
Et les mots pour le dire viennent aisément.