Chapitre 8

publicité
Lycée Brizeux – 2015/2016
L ECTURE – É CRITURE DANS UN FICHIER
Informatique – PCSI B
C HAPITRE 8
L ECTURE – É CRITURE DANS UN FICHIER
Un programme Python peut lire ou écrire sur des fichiers du disque dur. Cela est utile notamment
pour traiter des données issues de sources extérieures. Par exemple,
— récuppérer des données d’un fichier externe (pas forcément d’extension .py) ;
— écrire un fichier contenant les tests d’un programme python ;
— écrire un journal d’historique au cours de l’exécution d’un programme python (fichier log).
1 Lire les lignes d’un fichier
Python permet d’accéder aux données d’un fichier, en le lisant ligne par ligne :
1. on ouvre le fichier, à l’aide de la commande :
fichier=open("nom_du_fichier.extension","r")
. fichier est la nom de la variable permettant l’utilisation du fichier( peut être différent).
. Le premier argument est une chaîne de caractère contenant le nom du fichier à ouvrir.
Si le fichier est enregistré dans une autre dossier, il faut spécifier le chemin d’accès du fichier.
L’ extension du nom du fichier considéré permet d’identifier son format (par exemples, txt
pour certains textes, mp3 pour certains fichiers audio, jpg pour certains fichiers images, etc.).
Il arrive que certains fichiers texte n’ai pas d’extension.
. l’argument "r" sert à préciser que le fichier est « manipulé » en mode lecture (read).
2. on lit les lignes successivement, via des instructions construites avec
fichier.readline() : lecture de la prochaine ligne. Le résultat est une chaîne de caractères qui
se termine par le symbole \n (symbole de changement de ligne, compte comme un seul caractère)
fichier.readlines() : lecture des prochaines lignes, jusqu’à la fin du fichier. Le résultat est
une liste de chaînes de caractères.
fichier.read() : lecture de la fin du texte, sous la forme d’une unique chaîne de caractère.
Remarque : si le nom de la variable est différent de fichier, il faut adapter les instructions.
3. on ferme le fichier via l’instruction
fichier.close()
Il est indispensable de fermer tout fichier ouvert lorsque le programme a fini de travailler dessus.
Attention, à chaque lecture (d’une ligne ou de tout le fichier), la lecture reprend là où elle s’était
arrrêtée. Pour reprendre la lecture au début, il faut fermer le fichier puis le rouvrir.
Exemple d’utilisation
Pour lire, avec Python, les lignes d’un fichier nommé un_texte.txt, on utilise la syntaxe décrite précédemment comme indiqué dans le programme suivant :
fichier_a_lire=open("un_texte.txt","r")
print(fichier_a_lire.readline())
for ligne in fichier_a_lire.readlines():
print(ligne)
fichier_a_lire.close()
ouverture du fichier et affectation dans une variable
affichage et lecture de la première ligne
lecture des lignes restantes
affichage de celles-ci
fermeture
ATTENTION !
Les lignes lues dans le fichier considéré sont des chaînes de caractères. Ainsi, si l’on s’intéresse, par
exemple, à des données numériques, il faudra les convertir dans le type int ou float pour pouvoir
les exploiter ensuite.
Remarque. Si on sait à l’avance que l’on aura besoin de la ligne numéro 3 141 592 du fichier, on doit
quand même parcourir tout le fichier jusqu’à la ligne voulue (pas d’accès direct). Ce processus est donc
couteux en temps. Pour gérer plus efficacement de grands fichiers, on utilise des bases de données (elles
seront abordées plus tard dans l’année).
1
Lycée Brizeux – 2015/2016
L ECTURE – É CRITURE DANS UN FICHIER
Informatique – PCSI B
2 Écrire des données dans un fichier
2.1 Écriture dans un nouveau fichier
Pour écrire dans un fichier nom_du_fichier.extension :
1. on ouvre le fichier en écriture, par :
fichier=open("nom_du_fichier.extension","w")
. l’argument "w" précise que le fichier est « manipulé » en mode écriture (write)), ce qui créera
ce fichier s’il n’existait pas, et l’écrasera (efface toutes les données présentes) s’il existait déjà.
2. on y écrit des chaînes de caractères, avec
fichier.write("chaîne de caractères")
Python renvoie alors le nombre de caractères écrits. On peut utiliser cette instruction plusieurs
fois : ceci poursuivra la ligne courante. Pour terminer une ligne, on utilise le caractère \n. Un
espace est un caractère.
3. on ferme le fichier, via l’instruction
fichier.close()
Ceci permet d’enregistrer les modifications.
Exemple d’utilisation
fichier_a_ecrire=open("mon_fichier.txt","w")
fichier_a_ecrire.write("Devinette")
fichier_a_ecrire.write("\nPourquoi un corbeau")
fichier_a_ecrire.write(" ressemble à un bureau ?")
fichier_a_ecrire.close()
fichier_a_lire=open("mon_fichier.txt","r")
print(fichier_a_lire.readlines())
fichier_a_lire.close()
ouverture du fichier et affectation dans une variable
écriture
fermeture
ouverture du fichier créé
lecture du fichier entier
fermeture
2.2 Écriture à la fin d’un fichier existant
Pour compléter un fichier nom_du_fichier.extension déjà existant :
1. on ouvre le fichier en écriture avec ajout, par :
fichier=open("nom_du_fichier.extension","a")
. l’argument "a" précise que le fichier est « manipulé » en mode écriture avec ajout (append)).
Les nouvelles données écrites sont ajoutées après les données déjà présentes dans le fichier,
en poursuivant la dernière ligne.
2. on y écrit des chaînes de caractères, avec
fichier.write("chaîne de caractères")
3. on ferme le fichier, via l’instruction
fichier.close()
Exemple d’utilisation : suite de l’exemple précédent
fichier_a_modifier=open("mon_fichier.txt","a")
fichier_a_modifie.write("\nRéponse : ")
fichier_a_modifier.close()
fichier_a_lire=open("mon_fichier.txt","r")
print(fichier_a_lire.readlines())
fichier_a_lire.close()
2
ouverture du fichier et affectation dans une variable
écriture
fermeture
ouverture du fichier créé
lecture du fichier entier
fermeture
Lycée Brizeux – 2015/2016
L ECTURE – É CRITURE DANS UN FICHIER
Informatique – PCSI B
3 Exercices d’application
1. Lecture
(a) Mode lecture
Ouvrir, avec python, le fichier poeme.txt en mode lecture et l’affecter à la variable poeme.
Ajouter tout de suite l’instruction de fermeture du fichier, quelques lignes plus bas, pour ne
pas l’oublier.
(b) Entre l’instruction d’ouverture du fichier et celle de fermeture, créer une liste L contenant
les lignes du fichier poeme.txt. En déduire le nombre de lignes du fichier poeme.txt (on
affichera le résultat à l’aide d’un print).
(c) Afficher (avec un print) les lignes 1 et 10 (uniquement).
Pensez à ouvrir une nouvelle instance du fichier, car à la question (b) on atteint la fin du
fichier. On affichera d’abord la ligne 1, puis on parcourera les lignes 2 à 9, sans les afficher, à
l’aide d’une boucle for et de la commande readline. Enfin, on affichera la ligne 10.
2. Écriture
(a) Mode écriture
Créer, avec python, un fichier appelé table_de_7.txt. Dans ce fichier, et à l’aide d’une
boucle for, écrire 30 lignes de texte de la forme : k fois 7 = k*7, où k varie entre 1 et
30 (exemple : 3 fois 7 = 21).
La dernière ligne ne doit pas contenir de retour chariot \n (sinon, le fichier contiendra au
total 31 lignes). Ne pas oublier de fermer tout fichier ouvert.
(b) Ouvrir (directement, sans python) le fichier pour vérifier le contenu.
(c) Mode écriture avec ajout
Ajouter la ligne suivante de la table de multiplication : 31 × 7, sur le même modèle que précédemment. Ne pas oublier pas d’aller à la ligne.
(d) Ouvrir (directement, sans python) le fichier pour vérifier son contenu.
3
Téléchargement