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.