Aller au contenu

Maîtriser la gestion des fichiers en Python

Mise à jour :

logo python

La gestion des fichiers est une compétence essentielle en Python. Elle permet de lire, écrire et manipuler des données stockées dans des fichiers sur le disque dur. Que ce soit pour traiter des fichiers texte, des données structurées ou pour enregistrer les résultats d’un programme, savoir comment gérer les fichiers est indispensable pour tout développeur en Python.

Pourquoi gérer les fichiers en Python

Les fichiers sont un moyen courant de stocker et d’échanger des données. En Python, la gestion des fichiers permet de :

  • Lire des données depuis des fichiers pour les traiter ou les analyser.
  • Écrire des données dans des fichiers pour les sauvegarder ou les partager.
  • Manipuler différents types de fichiers, tels que les fichiers texte, CSV, JSON, etc.
  • Automatiser des tâches liées au traitement de données, comme la génération de rapports ou la transformation de données.

Comprendre comment interagir avec les fichiers permet de développer des applications plus complètes et utiles.

Ouvrir et fermer des fichiers

Pour travailler avec un fichier en Python, il faut d’abord l’ouvrir en utilisant la fonction intégrée open(). Cette fonction retourne un objet fichier qui peut être utilisé pour lire ou écrire dans le fichier. Une fois les opérations terminées, il est important de fermer le fichier en appelant la méthode close() pour libérer les ressources.

Syntaxe de base :

fichier = open('chemin/vers/fichier.txt', mode)
## Opérations sur le fichier
fichier.close()

Le paramètre mode spécifie le mode d’ouverture du fichier, comme lecture ou écriture.

Exemple d’ouverture en lecture :

fichier = open('donnees.txt', 'r')
## Lecture du fichier
fichier.close()

Exemple d’ouverture en écriture :

fichier = open('resultats.txt', 'w')
## Écriture dans le fichier
fichier.close()

Il est essentiel de fermer le fichier après utilisation pour éviter les fuites de ressources et les problèmes de corruption de données.

Lire des fichiers

Une fois le fichier ouvert en mode lecture, plusieurs méthodes permettent de lire son contenu.

Lire tout le contenu

La méthode read() lit tout le contenu du fichier et le retourne sous forme de chaîne de caractères.

Exemple :

fichier = open('donnees.txt', 'r')
contenu = fichier.read()
print(contenu)
fichier.close()

Lire ligne par ligne

La méthode readline() lit une seule ligne à la fois.

Exemple :

fichier = open('donnees.txt', 'r')
ligne = fichier.readline()
while ligne:
print(ligne.strip())
ligne = fichier.readline()
fichier.close()

Lire toutes les lignes

La méthode readlines() retourne une liste contenant toutes les lignes du fichier.

Exemple :

fichier = open('donnees.txt', 'r')
lignes = fichier.readlines()
for ligne in lignes:
print(ligne.strip())
fichier.close()

Itérer sur le fichier

Il est également possible d’itérer directement sur l’objet fichier.

Exemple :

fichier = open('donnees.txt', 'r')
for ligne in fichier:
print(ligne.strip())
fichier.close()

Cette méthode est efficace pour les fichiers volumineux car elle lit une ligne à la fois.

Écrire dans des fichiers

Pour écrire dans un fichier, il faut l’ouvrir en mode écriture ('w'), ajout ('a') ou lecture-écriture ('r+').

Écrire du texte

La méthode write() permet d’écrire une chaîne de caractères dans le fichier.

Exemple :

fichier = open('resultats.txt', 'w')
fichier.write('Ceci est un test.\n')
fichier.write('Écriture dans un fichier en Python.\n')
fichier.close()

Écrire plusieurs lignes

Il est possible d’écrire une liste de lignes avec la méthode writelines().

Exemple :

lignes = ['Ligne 1\n', 'Ligne 2\n', 'Ligne 3\n']
fichier = open('resultats.txt', 'w')
fichier.writelines(lignes)
fichier.close()

Ajouter du contenu à un fichier existant

En ouvrant le fichier en mode ajout ('a'), le nouveau contenu est ajouté à la fin du fichier sans effacer le contenu existant.

Exemple :

fichier = open('resultats.txt', 'a')
fichier.write('Nouvelle ligne ajoutée.\n')
fichier.close()

Modes d’ouverture des fichiers

Le paramètre mode de la fonction open() détermine comment le fichier est ouvert.

  • 'r' : Lecture seule. Le fichier doit exister.
  • 'w' : Écriture seule. Crée un nouveau fichier ou écrase le fichier existant.
  • 'a' : Ajout. Écrit à la fin du fichier s’il existe, sinon le crée.
  • 'r+' : Lecture et écriture. Le fichier doit exister.
  • 'w+' : Lecture et écriture. Crée un nouveau fichier ou écrase le fichier existant.
  • 'a+' : Lecture et ajout. Lit et ajoute à la fin du fichier.

On peut ajouter 'b' pour le mode binaire (par exemple, 'rb' pour lire un fichier binaire).

Exemple d’ouverture en mode binaire :

fichier = open('image.png', 'rb')
contenu = fichier.read()
fichier.close()

Utiliser le bloc ‘with’

L’utilisation du mot-clé with permet de gérer automatiquement l’ouverture et la fermeture du fichier, même en cas d’exception. Cela rend le code plus sûr et plus lisible.

Syntaxe :

with open('chemin/vers/fichier.txt', mode) as fichier:
# Opérations sur le fichier

Le fichier est automatiquement fermé à la fin du bloc with.

Exemple :

with open('donnees.txt', 'r') as fichier:
for ligne in fichier:
print(ligne.strip())

Travailler avec différents formats de fichiers

Fichiers CSV

Les fichiers CSV (Comma-Separated Values) sont couramment utilisés pour stocker des données tabulaires.

Lecture d’un fichier CSV :

import csv
with open('donnees.csv', 'r') as fichier_csv:
lecteur = csv.reader(fichier_csv)
for ligne in lecteur:
print(ligne)

Écriture dans un fichier CSV :

import csv
donnees = [['Nom', 'Age'], ['Alice', '30'], ['Bob', '25']]
with open('resultats.csv', 'w', newline='') as fichier_csv:
ecrivain = csv.writer(fichier_csv)
ecrivain.writerows(donnees)

Fichiers JSON

Les fichiers JSON (JavaScript Object Notation) sont utilisés pour stocker des données structurées de manière hiérarchique.

Lecture d’un fichier JSON :

import json
with open('donnees.json', 'r') as fichier_json:
donnees = json.load(fichier_json)
print(donnees)

Écriture dans un fichier JSON :

import json
donnees = {'nom': 'Alice', 'age': 30, 'ville': 'Paris'}
with open('resultats.json', 'w') as fichier_json:
json.dump(donnees, fichier_json)

Les exceptions liées aux fichiers

Lors de la gestion des fichiers, plusieurs exceptions peuvent survenir, comme FileNotFoundError, PermissionError ou IOError. Il est important de gérer ces exceptions pour rendre le programme plus robuste.

Exemple de gestion d’exception :

try:
with open('inexistant.txt', 'r') as fichier:
contenu = fichier.read()
except FileNotFoundError:
print("Erreur : le fichier n'a pas été trouvé.")
except PermissionError:
print("Erreur : permissions insuffisantes pour ouvrir le fichier.")
except Exception as e:
print(f"Erreur inattendue : {e}")

Exercice

L’objectif de ce programme est de lire un fichier texte contenant des informations sur des utilisateurs, traiter ces informations et les afficher de manière formatée. Le programme est conçu pour gérer les erreurs courantes, comme l’absence du fichier ou un mauvais formatage des données dans le fichier.

Ce que doit contenir le programme :

  1. Une fonction pour lire le fichier : Le programme lit un fichier texte contenant des informations utilisateur. Le fichier contient plusieurs lignes, chaque ligne ayant le format : nom,age,ville.
  2. Une fonction pour traiter les lignes : Le programme doit analyser chaque ligne, en extraire les informations et les traiter.
  3. Une fonction pour afficher les informations : Le programme doit afficher les informations extraites (nom, âge, ville) de manière lisible.
  4. Gestion des erreurs :
    • Gérer les erreurs lorsque le fichier est absent (afficher un message approprié).
    • Gérer les erreurs lorsque certaines lignes sont mal formatées (afficher un message indiquant la ligne problématique).
  5. Une fonction principale : C’est le point d’entrée du programme qui gère l’exécution des différentes étapes.

Fonctionnement du programme :

  1. Lecture du fichier texte :
    • Le programme commence par lire un fichier texte contenant des informations d’utilisateurs.
    • Le fichier à lire s’appelle utilisateurs.txt et doit être placé dans le même répertoire que le programme.
    • Chaque ligne du fichier doit être formatée comme ceci : nom,âge,ville. Par exemple :
      Alice,30,Paris
      Bob,25,Lyon
  2. Gestion des erreurs lors de la lecture :
    • Si le fichier n’existe pas, le programme affiche un message d’erreur : Erreur : Le fichier 'utilisateurs.txt' n'a pas été trouvé.
    • Si le fichier est trouvé, il lit toutes les lignes et les renvoie pour être traitées.
  3. Traitement des lignes :
    • Le programme analyse chaque ligne lue à partir du fichier.
    • Il s’attend à ce que chaque ligne soit correctement formatée avec trois éléments séparés par des virgules : nom, âge, ville.
    • Si une ligne n’est pas correctement formatée, le programme affiche un message d’erreur spécifique à cette ligne : Erreur de format : 'ligne' ne contient pas les informations attendues.
  4. Affichage des informations :
    • Pour chaque ligne correctement formatée, le programme affiche les informations de l’utilisateur de manière claire : Nom: Alice, Âge: 30, Ville: Paris
  5. Exécution du programme :
    • Lorsque le programme est lancé, il exécute la fonction principale, qui lit le fichier, traite les lignes et affiche les résultats.

Bonnes pratiques pour la gestion des fichiers

  • Utiliser le bloc with pour assurer la fermeture automatique des fichiers.
  • Gérer les exceptions pour informer l’utilisateur en cas d’erreur.
  • Spécifier le bon encodage lors de l’ouverture des fichiers texte (par défaut 'utf-8').

Exemple avec encodage :

with open('donnees.txt', 'r', encoding='utf-8') as fichier:
contenu = fichier.read()
  • Éviter d’utiliser des chemins de fichiers en dur. Utiliser le module os ou pathlib pour construire des chemins indépendants du système d’exploitation.

Exemple avec pathlib :

from pathlib import Path
chemin = Path('dossier') / 'fichier.txt'
with open(chemin, 'r') as fichier:
contenu = fichier.read()
  • Ne pas oublier de fermer les fichiers si le bloc with n’est pas utilisé.

Conclusion

La gestion des fichiers en Python est une compétence fondamentale pour tout développeur. Elle permet de lire et d’écrire des données, de manipuler différents formats de fichiers et d’automatiser de nombreuses tâches liées au traitement de données. En maîtrisant les méthodes d’ouverture, de lecture, d’écriture et en adoptant les bonnes pratiques, il est possible de créer des programmes robustes et efficaces.