TP - Python et les fichiers☘
Dans le dossier [NSI]
, créez le dossier [F05-Les_Fichiers]
.
Dans ce dossier, enregistrez sous le nom TPF05.11.py
le programme que
vous allez créer et compléter au fur et à mesure de ce TP.
Ce TP est un « tutoriel » qui a pour but de vous faire découvrir pas à pas quelques unes des instructions relatives à la manipulation de fichier avec Python.
Attention !
Ne faites pas que des copier/coller : posez-vous des questions afin de comprendre au mieux ces instructions.
Partie A - Créer un nouveau fichier texte☘
L'instruction :
with open('nom_du_fichier', 'w', encoding='utf-8') as nom_variable:
nom_du_fichier
dans le répertoire
courant (cf paragraphe précédent). Ce fichier texte
est associé à la variable nom_variable
dans le programme.
Attention
Si un fichier de même nom et de même format existe déjà dans le répertoire courant, alors ce fichier est automatiquement effacé et remplacé.
Chemins relatifs
On crée (accède à) un fichier dans un autre répertoire que le courant, en utilisant un adressage relatif dans le nom du fichier :
"/"
pour descendre,"../"
pour remonter d'un dossier.
A vous☘
-
Copiez/collez les instructions ci-dessous dans votre programme
TPF05.11.py
:1 2 3 4 5 6 7
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('Mon_fichier.py', 'w', encoding='utf-8') as fichier: # Opérations sur le fichier - partie suivante pass
-
Sauvegardez puis exécutez ce programme.
-
Ouvrez le répertoire
[F05-Les_Fichiers]
.
Vérifiez que ce répertoire contient à présent deux fichiers : -
Vous pouvez ouvrir le fichier
Mon_fichier.py
à l'aide d'un éditeur de texte et vérifier... qu'il est vide !
Partie B - Écrire dans un fichier texte☘
L'instruction :
nom_variable.write(texte)
str
) dans le fichier
référencé par la variable nom_variable
et ouvert en mode écriture
('w'
ou 'a'
– voir Partie C).
Rappel
Le caractère qui symbolise un passage à la ligne est '\n'
.
A vous☘
- Ouvrez le programme
TPF05.11.py
à l'aide de votre éditeur Python. -
Ajoutez les instructions suivantes à la place des lignes 6 et 7 de votre programme (attention à l'indentation) :
6 7 8 9 10 11 12
fichier.write('a = 1 \n') fichier.write('b = 1 \n') fichier.write('for i in range(10): \n') fichier.write(' temp = a \n') fichier.write(' a = b \n') fichier.write(' b = temp + a \n') fichier.write(' print(a) \n')
Contenu du programme
TPF05.11.py
1 2 3 4 5 6 7 8 9 10 11 12
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('Mon_fichier.py', 'w', encoding='utf-8') as fichier: fichier.write('a = 1 \n') fichier.write('b = 1 \n') fichier.write('for i in range(10): \n') fichier.write(' temp = a \n') fichier.write(' a = b \n') fichier.write(' b = temp + a \n') fichier.write(' print(a) \n')
-
Sauvegardez puis exécutez ce programme.
-
Vous pouvez ouvrir le fichier
Mon_fichier.py
à l'aide d'un éditeur de texte et vérifier... qu'il n'est plus vide !Contenu du fichier
Mon_fichier.py
Partie C - Ajouter des informations à un fichier☘
La fonction d'ouverture de fichier open()
admet plusieurs paramètres.
Parmi ceux-ci :
'w'
(signifie « write ») efface le contenu initial du fichier lorsque celui-ci existe déjà (ou bien crée le fichier s'il n'existe pas) puis permet d'écrire dans ce fichier (comme sur une page blanche).'a'
(signifie « append ») permet d'écrire des lignes à la suite du contenu déjà existant.'r'
(signifie « read ») ouvre le fichier en lecture seule et permet de « récupérer » les informations d'un fichier (Parties D, E et F de ce TP).
A vous☘
- Ouvrez le programme
TPF05.11.py
à l'aide de votre éditeur Python. -
Ajoutez les instructions suivantes à la suite de votre programme (attention à la numérotation des lignes) :
14 15
with open('Mon_fichier.py', 'a', encoding='utf-8') as fichier: fichier.write('\nprint("Fin de mon premier fichier !") \n')
Contenu du programme
TPF05.11.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('Mon_fichier.py', 'w', encoding='utf-8') as fichier: fichier.write('a = 1 \n') fichier.write('b = 1 \n') fichier.write('for i in range(10): \n') fichier.write(' temp = a \n') fichier.write(' a = b \n') fichier.write(' b = temp + a \n') fichier.write(' print(a) \n') with open('Mon_fichier.py', 'a', encoding='utf-8') as fichier: fichier.write('\nprint("Fin de mon premier fichier !") \n')
-
Sauvegardez puis exécutez ce programme.
-
Vous pouvez ouvrir le fichier
Mon_fichier.py
à l'aide d'un éditeur de texte et vérifier... qu'une ligne a été ajoutée à la fin de ce fichier !Contenu du fichier
Mon_fichier.py
Partie D - Lire toutes les lignes d'un coup☘
On peut lire d'un coup toutes les lignes d'un fichier grâce à la méthode
.readlines()
(avec un « s
» à la fin).
Ces lignes sont des chaînes de caractères et elles sont stockées dans un tableau (gourmand en mémoire).
A vous☘
- Ouvrez le programme
TPF05.11.py
à l'aide de votre éditeur Python. -
Ajoutez les instructions suivantes à la suite de votre programme (attention à la numérotation des lignes) :
17 18 19
with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: liste_lignes = fichier.readlines() print(liste_lignes)
Contenu du programme
TPF05.11.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('Mon_fichier.py', 'w', encoding='utf-8') as fichier: fichier.write('a = 1 \n') fichier.write('b = 1 \n') fichier.write('for i in range(10): \n') fichier.write(' temp = a \n') fichier.write(' a = b \n') fichier.write(' b = temp + a \n') fichier.write(' print(a) \n') with open('Mon_fichier.py', 'a', encoding='utf-8') as fichier: fichier.write('\nprint("Fin de mon premier fichier !") \n') with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: liste_lignes = fichier.readlines() print(liste_lignes)
-
Sauvegardez puis exécutez ce programme. Que constatez-vous dans la console :
Une réponse
Les lignes du fichier sont stockées dans la liste nommée
liste_lignes
:>>> (executing file "TPF05.11.py") ['a = 1 \n', 'b = 1 \n', 'for i in range(10): \n', ' temp = a \n', ' a = b \n', ' b = temp + a \n', ' print(a) \n', '\n', 'print("Fin de mon premier fichier !") \n']
On peut rendre le contenu de cette liste plus lisible en allant à la ligne après chaque virgule de séparation :
On peut constater que les indentations d'une part, et les sauts à la ligne représentés par le caractère['a = 1 \n', 'b = 1 \n', 'for i in range(10): \n', ' temp = a \n', ' a = b \n', ' b = temp + a \n', ' print(a) \n', '\n', 'print("Fin de mon premier fichier !") \n']
'\n'
d'autre part, sont conservés.
Partie E - Lire une ligne, puis une autre☘
On peut lire une seule ligne grâce à la méthode .readline()
(sans « s
» à la fin). Après la lecture d'une ligne (qui se termine
par '\n'
...), un « pointeur » va au début de la ligne suivante.
A vous☘
- Ouvrez le programme
TPF05.11.py
à l'aide de votre éditeur Python. -
Ajoutez les instructions suivantes à la suite de votre programme (attention à la numérotation des lignes) :
21 22 23 24 25 26 27 28
print("\nTest de la méthode .readline() :") with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: ligne = fichier.readline() print(ligne) ligne = fichier.readline() print(ligne) ligne = fichier.readline() print(ligne)
Contenu du programme
TPF05.11.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('Mon_fichier.py', 'w', encoding='utf-8') as fichier: fichier.write('a = 1 \n') fichier.write('b = 1 \n') fichier.write('for i in range(10): \n') fichier.write(' temp = a \n') fichier.write(' a = b \n') fichier.write(' b = temp + a \n') fichier.write(' print(a) \n') with open('Mon_fichier.py', 'a', encoding='utf-8') as fichier: fichier.write('\nprint("Fin de mon premier fichier !") \n') with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: liste_lignes = fichier.readlines() print(liste_lignes) print("\nTest de la méthode .readline() :") with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: ligne = fichier.readline() print(ligne) ligne = fichier.readline() print(ligne) ligne = fichier.readline() print(ligne)
-
Sauvegardez puis exécutez ce programme. Que constatez-vous dans la console :
Une réponse
On constate que le programme a bien « lu » la première ligne grâce à l'instruction de la ligne 23. Puis l'instruction
fichier.readline()
de la ligne 25 n'a pas recommencé la lecture à partir du début mais a bien effectué la lecture de la deuxième ligne du fichierMon_fichier.py
.Test de la méthode .readline() : a = 1 b = 1 for i in range(10):
Rappel
La chaîne de caractères renvoyée par l'instruction
fichier.readline()
se termine par'\n'
. C'est pour cette raison qu'un saut de ligne apparaît dans la console.
Partie F - Lire toutes les lignes, mais une par une☘
Opérateur « magique » de Python, l'opérateur d'inclusion in
s'applique
aussi à un fichier ouvert en lecture seule. Il permet de parcourir une par une
chaque ligne d'un fichier texte dans une boucle for
.
A vous☘
- Ouvrez le programme
TPF05.11.py
à l'aide de votre éditeur Python. -
Ajoutez les instructions suivantes à la suite de votre programme (attention à la numérotation des lignes) :
30 31 32 33
print("\nTest de la boucle for :") with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: for ligne in fichier: print(ligne.rstrip('\n')) # .rstrip() enlève le caractère donné en paramètre
Contenu du programme
TPF05.11.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('Mon_fichier.py', 'w', encoding='utf-8') as fichier: fichier.write('a = 1 \n') fichier.write('b = 1 \n') fichier.write('for i in range(10): \n') fichier.write(' temp = a \n') fichier.write(' a = b \n') fichier.write(' b = temp + a \n') fichier.write(' print(a) \n') with open('Mon_fichier.py', 'a', encoding='utf-8') as fichier: fichier.write('\nprint("Fin de mon premier fichier !") \n') with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: liste_lignes = fichier.readlines() print(liste_lignes) print("\nTest de la méthode .readline() :") with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: ligne = fichier.readline() print(ligne) ligne = fichier.readline() print(ligne) ligne = fichier.readline() print(ligne) print("\nTest de la boucle for :") with open('Mon_fichier.py', 'r', encoding='utf-8') as fichier: for ligne in fichier: print(ligne.rstrip('\n')) # .rstrip() enlève le caractère donné en paramètre
Remarques importantes
-
La variable
ligne
peut tout à fait être appelée autrement (instruction de la ligne n°32).
Cependant, la dénommer ainsi rappelle son usage. -
Chaque ligne du fichier lu peut contenir des « caractères invisibles », en particulier le caractère de passage à la ligne
'\n'
. La méthode.rstrip('\n')
appliquée à la variableligne
permet de supprimer ce caractère lorsqu'il est en dernière position dans cette variable.
-
-
Sauvegardez puis exécutez ce programme. Que constatez-vous dans la console :
Une réponse
On constate que le programme lit bien successivement chacune des lignes du fichier
Mon_fichier.py
en supprimant le caractère'\n'
de saut à la ligne en fin de ligne.Test de la boucle for : a = 1 b = 1 for i in range(10): temp = a a = b b = temp + a print(a) print("Fin de mon premier fichier !")
Rappel
La chaîne de caractères renvoyée par l'instruction
fichier.readline()
se termine par'\n'
. C'est pour cette raison qu'un saut de ligne apparaît dans la console.