Langage Python

Gestion des fichiers en Python

Jusqu'ici, dans ce tutoriel, nous avons utilisé des variables pour stocker des données. Le problème avec cette approche est que, dès la fin du programme, nos données sont perdues. Une façon de stocker les données de manière permanente consiste à les mettre dans un fichier. Ce cours explique comment stocker des données dans le fichier et en lire les données.

En Python, la gestion de fichiers comprend les trois étapes suivantes:

  • Ouvrir un fichier
  • Traiter le fichier, c’est-à-dire effectuer des opérations de lecture ou d’écriture.
  • Fermer le fichier.

Comment ouvrir un fichier?

Python a une fonction intégrée open() pour ouvrir un fichier. Cette fonction renvoie un objet de fichier, également appelé descripteur, car il est utilisé pour lire ou modifier le fichier en conséquence.

Syntaxe :
                                fileobject = open(filename, mode)
                            

filename est le nom ou le chemin du fichier.
mode est une chaîne qui spécifie le type d'opération que vous voulez effectuer sur le fichier (c'est-à-dire lecture, écriture, ajout, etc.). Le tableau suivant répertorie les différents modes disponibles.

ModeDescription
'r'Ouvrez un fichier en lecture. (par défaut)
'w'Ouvrez un fichier pour l'écriture. Dans ce mode, si le fichier spécifié n'existe pas, il sera créé. Si le fichier existe, alors ses données sont détruites.
'x'Ouvrez un fichier pour une création exclusive. Si le fichier existe déjà, l'opération échoue.
'a'Ouvrez un fichier en mode ajout. Si le fichier n'existe pas, ce mode le créera. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.
'+'Ouvrir un fichier pour la mise à jour (lecture et écriture)

Nous pouvons également spécifier le type de fichier (fichier texte ou fichier binaire) que nous souhaitons utiliser avec la chaîne de mode en ajoutant "t" pour les fichiers texte et "b" pour les fichiers binaires. Mais comme le mode texte est le mode par défaut, il est généralement omis lors de l’ouverture de fichiers en mode texte.

En cas de succès, open() renvoie un objet fichier associé au nom de fichier spécifié lors de son appel.

Exemple 1 :
                                # mode lecture
                                f1 = open("etudiants.txt", "r")

                                # ourvir un fichier binaire en mode écriture.
                                f2 = open("photo.jpg", "wb")
                            

Contrairement aux autres langages, le caractère 'a' n'implique pas le nombre 97 tant qu'il n'est pas codé en ASCII (ou un autre codage équivalent).
De plus, le codage par défaut dépend de la plate-forme. Sous Windows, il s’agit de "cp1252" mais de "utf-8" sous Linux.
Donc, nous ne devons pas également compter sur le codage par défaut, sans quoi notre code se comportera différemment selon les plateformes.
Par conséquent, lorsque vous travaillez avec des fichiers en mode texte, il est vivement recommandé de spécifier le type de codage.

Exemple 2 :
                                # mode lecture
                                f = open("etudiants.txt", "r", encoding = 'utf-8')
                            

Comment fermer un fichier ?

Une fois que nous avons fini de travailler avec le fichier ou que nous voulons ouvrir le fichier dans un autre mode, nous devrions fermer le fichier en utilisant la méthode close() de l'objet file comme suit:

                                f.close()
                            

La fermeture d'un fichier libère de précieuses ressources système. Si vous avez oublié de fermer le fichier, Python fermera automatiquement le fichier à la fin du programme ou lorsque l’objet fichier n’est plus référencé dans le programme. Toutefois, si votre programme est volumineux et que vous lisez ou écrivez plusieurs fichiers, cela peut prendre beaucoup de ressources sur le système. Si vous continuez à ouvrir de nouveaux fichiers sans précaution, vous risquez de manquer de ressources. Soyez donc un bon programmeur et fermez le fichier dès que vous en avez terminé.

Cette méthode n'est pas totalement sûre. Si une exception se produit lorsque nous effectuons une opération avec le fichier, le programme se ferme sans fermer le fichier.

Exemple 3 :
                                try:
                                    f = open("etudiants.txt", "r", encoding = 'utf-8')

                                    # traitements
                                finally:
                                    f.close()
                            

De cette façon, nous avons la garantie que le fichier est correctement fermé, même si une exception est déclenchée, ce qui provoque l’arrêt du flux du programme.

La meilleure façon de faire est d'utiliser l'instruction with. Cela garantit que le fichier est fermé lors de la sortie du bloc à l'intérieur de with.

Exemple 4 :
                                with open("etudiants.txt", encoding = 'utf-8') as f:
                                    # traitments sur 
                                    # le fichier f
                            

Comment écrire dans un fichier ?

Afin d'écrire dans un fichier, nous devons l'ouvrir en écriture 'w', ajouter 'a' ou en création exclusive 'x'.

Nous devons faire attention avec le mode 'w' car il écrasera le contenu de fichier s'il existe déjà. Toutes les données précédentes sont effacées.

L'écriture d'une chaîne ou d'une séquence d'octets (pour les fichiers binaires) est effectuée à l'aide de la méthode write(). Cette méthode renvoie le nombre de caractères écrits dans le fichier.

Exemple 5 :
                                with open("etudiants.txt", encoding = 'utf-8') as f:
                                    f.write("Mostafa \n ")
                                    f.write("Ismail \n ")
                                    f.write("Dounia \n ")
                                    # autres instruction
                            

Ce programme créera un nouveau fichier nommé 'etudiants.txt' s'il n'existe pas. S'il existe, il est écrasé.
Nous devons inclure nous-mêmes le caractère de nouvelle ligne pour distinguer différentes lignes.

Nous pouvons également utiliser la fonction print() pour écrire des données dans le fichier.
Notez le quatrième paramètre dans la signature de fonction print "file". Par défaut, "file" pointe vers la sortie standard, ce qui signifie qu'il affichera les données à l'écran. Pour exporter des données dans un fichier, spécifiez simplement l'objet file. Le programme suivant utilise la fonction print() au lieu de write() pour écrire des données dans le fichier.

Exemple 6 :
                                with open("etudiants.txt", encoding = 'utf-8') as f:
                                    print("Mostafa", file=f)
                                    print("Ismail", file=f)
                                    print("Dounia", file=f)
                                    # autres instruction
                            

Ce programme produit la même sortie qu'auparavant, la seule différence étant que, dans ce cas, le caractère de nouvelle ligne (\n) est automatiquement ajouté par la fonction print().

Comment lire un fichier ?

Pour lire un fichier, vous devez l'ouvrir en mode "r". En plus de cela, vous devez également vous assurer que le fichier que vous voulez lire existe déjà car, en mode "r", la fonction open() génère une erreur FileNotFoundError si elle ne parvient pas à trouver un fichier.

Pour tester si un fichier existe ou non, nous pouvons utiliser la fonction isfile() du module os.path. La syntaxe de isfile() est la suivante:

                                isfile(path)
                            

Si le fichier est trouvé sur le chemin indiqué, isfile() renvoie True. Sinon False.

Il existe différentes méthodes disponibles à cet effet. Nous pouvons utiliser la méthode read(size) pour lire un nombre défini(size) de données . Si le paramètre size n'est pas spécifié, il lit et retourne jusqu'à la fin du fichier.

Exemple 7 :
                                with open("etudiants.txt", encoding='utf-8') as f:
                                    print("4 premières données : ", f.read(4))
                                    print("4 données suivantes : ", f.read(4))
                                    print("le reste du fichier : ", f.read())
                                    print("lecture supplémentaire ", f.read())
                                
                            
4 premières données : Most
4 données suivantes : afa

le reste du fichier : Ismail
Dounia

lecture supplémentaire :

Nous pouvons voir que la méthode read() renvoie newline sous la forme '\ n'. Une fois la fin du fichier atteinte, nous obtenons une chaîne vide lors de lectures supplémentaires.

Nous pouvons changer notre curseur de fichier actuel (position) en utilisant la méthode seek(). De même, la méthode tell() renvoie notre position actuelle (en nombre d'octets).

Exemple 8 :
                                with open("etudiants.txt", encoding='utf-8') as f:
                                    print("4 premières données ", f.read(4))
                                    print("position actuelle : ", f.tell())
                                    print("4 données suivantes : ", f.read(4))
                                    f.seek(0)  # position le curseur au début
                                    print("4 données : ", f.read(4))
                                
                            
4 premières données Most
position actuelle : 4
4 données suivantes : afa
4 données : Most

Nous pouvons lire un fichier ligne par ligne en utilisant une boucle for. C'est à la fois efficace et rapide.

Exemple 9 :
                                with open("etudiants.txt", encoding='utf-8') as f:
                                    for ligne in f:
                                        print(ligne)
                            
Mostafa
Ismail
Dounia

Les lignes du fichier lui-même ont un caractère de nouvelle ligne '\n'.

Alternativement, nous pouvons utiliser la méthode readline() pour lire les lignes individuelles d'un fichier. Cette méthode lit un fichier jusqu'à la nouvelle ligne, y compris le caractère de nouvelle ligne.

Exemple 10 :
                                with open("etudiants.txt", encoding='utf-8') as f:
                                    print("1ère ligne : ", f.readline())
                                    print("2ème ligne : ", f.readline())
                                    print("3ème ligne : ", f.readline())
                                    print("lecture sup : ", f.readline())
                            
1ère ligne : Mostafa

2ème ligne : Ismail

3ème ligne : Dounia

lecture sup :

Enfin, la méthode readlines() renvoie une liste des lignes restantes du fichier entier. Toutes ces méthodes de lecture renvoient des valeurs vides lorsque la fin du fichier est atteinte.

Exemple 11 :
                                with open("etudiants.txt", encoding='utf-8') as f:
                                    l = f.readlines()
                                    print(l)
                            
['Mostafa\n', 'Ismail\n', 'Dounia']

Autres méthodes

Il existe différentes méthodes disponibles avec l’objet file. Certains d'entre eux ont été utilisés dans les exemples ci-dessus.
Voici la liste complète des méthodes en mode texte avec une brève description.

MéthodeDescription
close()Fermer un fichier ouvert. Cela n'a aucun effet si le fichier est déjà fermé.
detach()Séparer le tampon binaire sous-jacent de TextIOBase et renvoyez-le.
fileno()Renvoie un nombre entier (descripteur) du fichier.
flush()Vider le tampon d'écriture du flux de fichiers.
isatty()Renvoie True si le flux de fichiers est interactif.
read(n)Lire au plus n caractères du fichier. Lit jusqu'à la fin du fichier s'il est négatif ou nul.
readable()Renvoie True si le flux de fichiers peut être lu.
readline(n=-1)Lire et retourner une ligne du fichier. Lit au plus n octets si spécifié.
readlines(n=-1)Lire et retourner une liste de lignes du fichier. Lit au plus n octets / caractères si spécifié.
seek(offset,from=SEEK_SET)Modifiez la position du fichier en octets décalés (offset), en référence à "from" (début, actuel, fin).
seekable()Renvoie True si le flux de fichiers prend en charge l'accès aléatoire.
tell()Renvoie l'emplacement actuel du fichier.
truncate(size=None)Redimensionnez le flux de fichiers à "size" octets. Si la taille (size) n'est pas spécifiée, redimensionner à l'emplacement actuel.
writable()Renvoie True si le flux de fichier peut être écrit.
write(s)Ecrit la chaîne "s" dans le fichier et renvoie le nombre de caractères écrits.
writelines(lines)Ecrire une liste de lignes(lines) dans le fichier.

Partager ce cours avec tes amis :

Rédigé par M. ESSADDOUKI

Learning a new programming language is an easy thing, but the most difficult thing is how to design efficient algorithms for real-world problems, so don't be a programmer, be a problems solver.

Cours Similaires :