Travailler avec des fichiers texte en Python
Sommaire
- 1- Objectifs
- 2- Introduction
- 3- Modes d'accès aux fichiers
- 4- Étapes à suivre et erreurs rencontrées
- 4.1- Étapes à suivre
- 4.2- Erreurs rencontrées
- 5- Ouverture d'un fichier
- 5.1- Syntaxe:
- 5.2- Remarque:
- 6- Lecture d'un fichier
- 6.1- Lecture en bloc avec
read()
- 6.2- Lecture en bloc avec
readlines
(avec "s") - 6.3- Lecture en bloc avec
readline
(sans "s") - 6.4- Lecture ligne par ligne en itérant sur l’objet fichier
- 7- Ecriture d’un fichier texte
- 7.1- Ecriture d’un fichier texte avec
write()
- 7.2- Ecriture d’un fichier texte avec
writelines()
- 8- Ajout dans un fichier texte
- 9- Applications
- 9.1.1- Sommaire du cours Python
Travailler avec des fichiers en Python
-
Objectifs
- Au cours de cette leçon, vous apprendrez à manipuler des fichiers texte en Python : ouvrir, fermer, lire et écrire des fichiers .txt à l’aide de programmes informatiques.
-
Introduction
- Un fichier est une collection d’informations stockées sur une mémoire de masse (non volatile, capacité plus importante que la mémoire vive)
- Un fichier texte est un fichier qui contient des caractères imprimables et des espaces organisés en lignes successives, ces lignes étant séparées les unes des autres par un caractère spécial non-imprimable appelé "marqueur de fin de ligne"
- Les fichiers textes sont humainement lisibles. Autrement dit, ils contiennent du texte (lettres, ponctuations, nombres, …). Leur contenu est souvent divisé en lignes.
-
Modes d’accès aux fichiers
- Lecture seule (‘r’): ouvre le fichier texte pour la lecture. La poignée est positionnée au début du fichier. Si le fichier n’existe pas, génère une erreur d’E / S. C’est également le mode par défaut dans lequel le fichier est ouvert.
- Lecture et écriture (‘r +’): ouvre le fichier pour la lecture et l’écriture. La poignée est positionnée au début du fichier. Déclenche une erreur d’E / S si le fichier n’existe pas.
- Écriture seule (‘w’): ouvre le fichier pour l’écriture. Pour le fichier existant, les données sont tronquées et écrasées. La poignée est positionnée au début du fichier. Crée le fichier si le fichier n’existe pas.
- Ecrire et lire (‘w +’) : ouvre le fichier pour la lecture et l’écriture. Pour le fichier existant, les données sont tronquées et écrasées. La poignée est positionnée au début du fichier.
- Ajouter uniquement (‘a’) : ouvre le fichier pour l’écriture. Le fichier est créé s’il n’existe pas. La poignée est positionnée à la fin du fichier. Les données en cours d’écriture seront insérées à la fin, après les données existantes.
- Ajouter et lire (‘a +’): ouvre le fichier pour la lecture et l’écriture. Le fichier est créé s’il n’existe pas. La poignée est positionnée à la fin du fichier. Les données en cours d’écriture seront insérées à la fin, après les données existantes.
-
Étapes à suivre et erreurs rencontrées
-
Étapes à suivre
- Pour manipuler un fichier, que ce soit en mode texte ou binaire, il y a trois principales étapes à suivre.
- Il faut d’abord ouvrir le fichier désiré, en lecture ou en écriture. S’il s’agit d’un nouveau fichier, il doit être avant tout créé.
- Une fois le fichier ouvert, on va pouvoir effectuer des opérations de lecture et d’écriture sur ce dernier.
- Enfin, une fois que l’on a terminé, il faut fermer le fichier pour libérer les ressources allouées par le système d’exploitation.
-
Erreurs rencontrées
- Deux erreurs peuvent survenir lorsqu’on manipule un fichier.
- Tout d’abord, il se peut que le fichier que l’on tente d’ouvrir n’existe pas, dans lequel cas une erreur de type
FileNotFoundError
est générée. - Ensuite, durant la lecture ou l’écriture, différentes situations d’erreur peuvent survenir comme le disque qui devient plein, l’utilisateur qui n’a pas les droits suffisants pour lire/écrire un fichier, etc.
- Dans toutes ces situations, une erreur de type
IOError
survient, signalant en fait une erreur d’entrée/sortie. Si on veut un programme robuste, il faudra les traiter à l’aide d’untry-except
. - L’exception
IOError
est en fait une erreur générique d’entrée/sortie et on peut se limiter à gérer cette dernière. Néanmoins, il est parfois utile de gérer ses cas particuliers, parmi lesquels on a : FileNotFoundError
si le fichier n’existe pas ;FileExistsError
si le fichier existe déjà ;PermissionError
si le programme n’a pas les droits d’accès nécessaires sur le fichier ;- et
IsADirectoryError
si le fichier est en fait un dossier. -
Ouverture d’un fichier
- Cela se fait en utilisant la fonction
open()
. Aucun module ne doit être importé pour cette fonction. -
Syntaxe:
File_object = open (r "File_Name", "Access_Mode")
- Elle prend en paramètre :
- Le chemin (absolu ou relatif) menant au fichier à ouvrir ;
- Le mode d’ouverture.
- Le fichier doit exister dans le même répertoire que le fichier du programme python sinon, l’adresse complète du fichier doit être écrite à la place du nom de fichier.
-
Remarque:
Le
r
est placé avant le nom de fichier pour éviter que les caractères de la chaîne de nom de fichier ne soient traités comme des caractères spéciaux. - Par exemple, s’il y a \ temp dans l’adresse de fichier, alors \ t est traité comme le caractère de tabulation et une erreur d’adresse non valide est générée.
- Le
r
rend la chaîne brute, c’est-à-dire qu’il indique que la chaîne est sans caractères spéciaux. Le r peut être ignoré si le fichier se trouve dans le même répertoire et que l’adresse n’est pas placée. -
Lecture d’un fichier
-
Lecture en bloc avec
read()
-
Lecture en bloc avec
readlines
(avec "s") - La méthode
readlines()
transfère toutes les lignes restantes dans une liste de chaînes : - La méthode
readlines()
permet donc de lire l’intégralité d’un fichier en une instruction seulement. Cela n’est possible toutefois que si le fichier à lire n’est pas trop gros : puisqu’il est copié intégralement dans une variable, c’est-à-dire dans la mémoire vive de l’ordinateur, il faut que la taille de celle-ci soit suffisante. Si vous devez traiter de gros fichiers, utilisez plutôt la méthodereadline()
dans une boucle. - Notez bien que
readline()
est une méthode qui renvoie une chaîne de caractères, alors que la méthodereadlines()
renvoie une liste. À la fin du fichier,readline()
renvoie une chaîne vide, tandis quereadlines()
renvoie une liste vide - Le contenu du fichier est stocké dans une liste, une ligne = un élément. Le caractère
\n
est maintenu. Il n’est pas présent sur la dernière ligne de notre fichier exemple. -
Lecture en bloc avec
readline
(sans "s") -
Lecture ligne par ligne en itérant sur l’objet fichier
- C’est la forme la plus efficace – et la plus concise – pour une lecture ligne à ligne.
- Le caractère \n est présent toujours, noter la longueur de la chaîne (+1 pour toutes sauf la dernière)
-
Ecriture d’un fichier texte
-
Ecriture d’un fichier texte avec
write()
- La méthode
write ()
écrit une chaînestr
dans le fichier. Il n’y a pas de valeur de retour. En raison de la mise en mémoire tampon, la chaîne peut ne pas apparaître dans le fichier tant que la méthodeflush ()
ouclose ()
n’est pas appelée. - Syntaxe:
fileObject.write( str )
- Nous insérons le caractère saut de ligne « \n » après chaque moto, sauf la dernière
-
Ecriture d’un fichier texte avec
writelines()
- La méthode
writelines()
écrit les éléments d’une liste dans le fichier. writelines()
permet d’écrire directement le contenu d’une liste. Nous devons quand même insérer le caractère "\n" pour que le saut de ligne soit effectif dans le fichier.- L’endroit où les textes seront insérés dépend du mode de fichier et de la position du flux.
- « a »: Les textes seront insérés à la position actuelle du flux de fichier, par défaut à la fin du fichier.
- « w »: Le fichier sera vidé avant que les textes ne soient insérés à la position actuelle du flux de fichiers, par défaut 0.
- Syntaxe:
file.writelines(list)
-
Ajout dans un fichier texte
-
Applications
- Ecrire une fonction Python qui permet de copier un fichier texte dans un autre sans copier les lignes qui commencent par un caractère ’#’
-
Les modes d’accès régissent le type d’opérations possibles dans le fichier ouvert. Il fait référence à la manière dont le fichier sera utilisé une fois qu’il sera ouvert. Ces modes définissent également l’emplacement du descripteur de fichier dans le fichier. La poignée de fichier est comme un curseur, qui définit à partir de laquelle les données doivent être lues ou écrites dans le fichier. Il existe 6 modes d’accès en python.
Référence:https://www.geeksforgeeks.org/reading-writing-text-files-python/
# -*- coding: utf -*-
#ouverture en lecture
f = open("voitures.txt","r")
#lecture
lst = f.readlines()
#affichage
print("** contenu de lst **")
print(lst)
print("** fin contenu **")
#information sur lst
print("type de s : ",type(lst))
print("longueur de s : ", len(lst))
#fermeture
f.close()
# -*- coding: utf -*-
#ouverture en lecture
f = open("voitures.txt","r")
#lecture ligne itérativement
for s in f:
print(s,len(s))
#fermeture
f.close()
# -*- coding: utf -*-
#ouverture en écriture
f = open("moto.txt","w")
#écriture
f.write("honda\n")
f.write("yamaha\n")
f.write("ducati")
#fermeture
f.close()
# -*- coding: utf -*-
#ouverture en ajout
f = open("moto.txt","a")
#ajouter un saut de ligne
f.write("\n")
#écriture
f.write("laverda")
#fermeture
f.close()
def filtre(source,destination):
"recopier un fichier en éliminant les lignes de remarques"
fs = open(source, 'r')
fd = open(destination, 'w')
while 1:
txt = fs.readline()
if txt =='':
break
if txt[0] != '#':
fd.write(txt)
fs.close()
fd.close()
return
filtre('voitures.txt', 'test_f.txt')