Accéder au contenu principal

Comment lire un fichier ligne par ligne en Python

Découvrez des modèles pratiques pour travailler avec des fichiers texte, des journaux et des ensembles de données volumineux dans Python.
Actualisé 24 janv. 2026  · 6 min lire

Python propose plusieurs méthodes pour lire des fichiers ligne par ligne, et à première vue, elles peuvent toutes sembler interchangeables. Dans la pratique, cependant, le choix que vous faites influe sur l'utilisation de la mémoire, les performances et même la lisibilité de votre code. Certaines approches s'adaptent parfaitement aux fichiers volumineux, tandis que d'autres peuvent entraîner des problèmes sans que cela soit immédiatement perceptible.

Dans ce tutoriel, vous apprendrez la méthode recommandée pour lire un fichier ligne par ligne en Python et pourquoi elle devrait généralement être votre méthode par défaut. Nous examinerons également quelques alternatives, expliquerons dans quels cas elles sont pertinentes et soulignerons les erreurs courantes qui peuvent induire en erreur. À la fin, vous serez en mesure de lire des fichiers avec assurance et efficacité, que vous écriviez un script rapide ou que vous réalisiez une tâche plus complexe.

Méthode recommandée pour lire un fichier ligne par ligne en Python

Si vous ne devez retenir qu'un seul modèle de cet article, veuillez choisir celui-ci. Dans la plupart des cas, l'itération directe sur un objet fichier est la méthode la plus simple, la plus sûre et la plus efficace pour lire un fichier ligne par ligne. C'est également l'approche la plus couramment utilisée dans le code Python réel.

À un niveau élémentaire, un objet fichier en Python est déjà un itérateur. Cela signifie que vous pouvez le parcourir directement et obtenir une ligne à la fois :

with open("example.txt", "r", encoding="utf-8") as file:
    for line in file:
        print(line)

Ceci fonctionne exactement comme prévu. Python ouvre le fichier et génère chaque ligne une par une au fur et à mesure que la boucle s'exécute. Il n'y a pas d'indexation manuelle, pas d'appels de fonctions supplémentaires et aucune complexité cachée.

L'un des principaux avantages de cette approche est l'efficacité de la mémoire. Python ne charge pas l'intégralité du fichier en mémoire. Au lieu de cela, il lit une seule ligne, la traite, puis passe à la suivante. Cela rend ce modèle sécurisé même pour les fichiers de très grande taille, tels que les journaux ou les exportations de données brutes.

C'est également la solution la plus conforme à l'esprit Python. L'itération directe sur un objet fichier est claire, lisible et immédiatement compréhensible pour toute personne familiarisée avec Python. Cela est important lorsque les scripts s'étoffent ou lorsque d'autres personnes doivent consulter votre code ultérieurement.

En raison de ces avantages, cela devrait être votre choix par défaut, à moins que vous n'ayez une raison très spécifique de faire autrement. Il gère automatiquement les fichiers volumineux, s'adapte facilement à l'augmentation de la taille des fichiers et évite toute utilisation inutile de la mémoire, le tout sans ajouter de complexité supplémentaire.

Gestion des sauts de ligne et des espaces blancs lors de la lecture de lignes en Python

Si vous avez déjà imprimé des lignes à partir d'un fichier et remarqué des lignes vides inattendues ou vous êtes demandé pourquoi les chaînes de caractères ne s'affichent pas correctement, vous avez rencontré le comportement de Python en matière de sauts de ligne. Il s'agit de l'un des problèmes les plus courants chez les débutants, et il est important de le comprendre dès le début. 

Lorsque Python lit un fichier ligne par ligne, chaque ligne se termine généralement par un caractère de nouvelle ligne (\n). Ce saut de ligne fait partie intégrante de la ligne elle-même, il ne s'agit pas d'un élément ajouté ultérieurement par Python. 

Par exemple, un fichier qui se présente comme suit :

apple
banana
cherry

se lit en réalité comme suit : 

apple\nbanana\n et cherry\n.

Ce comportement préserve la structure d'origine du fichier, ce qui est important lorsque le formatage est important. Cependant, lorsque vous traitez du texte, par exemple pour comparer des valeurs, analyser des données ou nettoyer des entrées, il est souvent nécessaire de supprimer ces espaces supplémentaires.

Lignes de nettoyage pour le traitement

La solution la plus courante consiste à supprimer les espaces blancs avant d'utiliser chaque ligne :

with open("data.txt", encoding="utf-8") as file:
    for line in file:
        clean_line = line.strip()
        print(clean_line)

La méthode ` strip() ` supprime les espaces blancs en début et en fin de chaîne, y compris les espaces, les tabulations et les caractères de nouvelle ligne. C'est généralement ce que vous souhaitez lorsque :

  • Comparaison des lignes aux valeurs attendues
  • Conversion de chaînes en nombres
  • Création de données structurées à partir du contenu des fichiers

Modèles courants d'espaces blancs

Selon votre cas d'utilisation, des méthodes plus ciblées peuvent s'avérer plus efficaces :

  • line.strip() supprime les espaces blancs aux deux extrémités

  • line.rstrip() supprime les espaces blancs à droite

  • line.rstrip("\n") supprime uniquement le caractère de nouvelle ligne

Par exemple, si l'indentation est importante, mais pas les sauts de ligne à la fin :

clean_line = line.rstrip("\n")

Quand ne pas dénuder les câbles

Il est tout aussi important de savoir quand ne pas supprimer les espaces blancs. Si vous travaillez avec :

  • Texte préformaté
  • Fichiers à largeur fixe
  • Journaux où l'espacement est important
  • Markdown ou extraits de code

La suppression des espaces blancs peut perturber la structure des données. Dans ces cas, veuillez travailler avec les lignes brutes et gérer le formatage de manière intentionnelle.

Une règle pratique : supprimez les lignes lorsque vous traitez du contenu ; conservez les espaces blancs lorsque la mise en forme est importante.

Comment suivre les numéros de ligne en Python

Lorsque vous lisez des fichiers ligne par ligne, il est courant de vouloir savoir à quelle ligne vous vous trouvez. Ceci est particulièrement utile pour les journaux, les erreurs de validation et le débogage de fichiers d'entrée complexes.

Python facilite cette opération grâce à la fonction intégrée ` enumerate() ` :

with open("data.txt", encoding="utf-8") as file:
    for line_number, line in enumerate(file, start=1):
        print(line_number, line.strip())

Voici ce qui se passe :

  • Le fichier continue de produire une ligne à la fois.

  • enumerate() ajoute un compteur à côté de chaque ligne

  • start=1 correspond à la manière dont les humains comptent les lignes

Ce modèle reste efficace en termes de mémoire et fonctionne tout aussi bien pour les fichiers volumineux.

Lorsque les numéros de ligne sont importants

Le suivi des numéros de ligne est particulièrement utile pour :

  • Journaux: identification du lieu où un événement s'est produit
  • Validation: signaler précisément où apparaissent les données erronées
  • Débogage: traçage des échecs d'analyse syntaxique
  • Commentairesdes utilisateurs: indication d'une ligne spécifique dans un fichier d'entrée

Étant donné que l'enumerate() e permet de conserver un code propre et lisible, elle est presque toujours préférable à la gestion manuelle d'un compteur.

Utilisation de readline() pour lire une ligne à la fois en Python

Python propose également une option plus manuelle : readline(). Vous n'en aurez pas souvent besoin, mais le comprendre vous aidera à reconnaître quand il est approprié de l'utiliser.

La méthode ` readline() ` lit une seule ligne à chaque fois qu'elle est appelée. Lorsque le fichier est épuisé, il renvoie une chaîne vide :

with open("example.txt", encoding="utf-8") as file:
    line = file.readline()
    while line:
        print(line.strip())
        line = file.readline()

Quand readline() est pertinent

readline() est utile lorsque la lecture doit être conditionnelle ou étroitement contrôlée, par exemple :

  • Programmes interactifs
  • S'arrêter dès qu'une condition est remplie
  • Combiner la lecture de fichiers avec une logique complexe

Par exemple :

with open("log.txt", encoding="utf-8") as file:
    while True:
        line = file.readline()
        if not line or "ERROR" in line:
            break
        print(line.strip())

Pourquoi il n'est généralement pas préférable à la boucle par défaut

Dans la plupart des cas, cette approche est toujours préférable :

for line in file:
    process(line)

Il est plus court, plus clair, tout aussi efficace et plus difficile à utiliser à mauvais escient. Considérez readline() comme un outil spécial, et non comme un substitut à la boucle standard.

Pourquoi la fonction readlines() est généralement déconseillée pour les fichiers volumineux

La méthode ` readlines() ` lit l'intégralité du fichier en mémoire et renvoie une liste de lignes :

with open("example.txt", encoding="utf-8") as file:
    lines = file.readlines()

Cette méthode est efficace pour les fichiers de petite taille, mais elle n'est pas adaptée aux fichiers volumineux.

Étant donné que l'intégralité du fichier est chargée en une seule fois :

  • L'utilisation de la mémoire augmente avec la taille du fichier.
  • Les fichiers volumineux peuvent ralentir votre programme ou provoquer son blocage.
  • Les problèmes apparaissent souvent uniquement en production.

Quand readlines() est acceptable

Il est raisonnable lorsque :

  • Le fichier est assurément de petite taille.
  • Il est impératif que toutes les lignes soient disponibles simultanément.
  • La taille est prévisible et limitée.

Dans le cas contraire, l'itération ligne par ligne est généralement la meilleure option.

Erreurs courantes lors de la lecture de fichiers ligne par ligne

La plupart des problèmes découlent de quelques petites négligences :

  • Oubli de fermer les fichiers → Utilisation with

  • Chargement involontaire de fichiers entiers → Veuillez éviter read() et readlines()

  • Ignorer les encodages → Spécifier explicitement UTF-8

  • Confusion entre les modes texte et binaire → Veuillez utiliser "r" pour le texte et "rb" pour le binaire.

Une fois que vous en avez connaissance, il est facile de les éviter.

Meilleures pratiques pour lire des fichiers ligne par ligne en Python

Avant de conclure, voici une liste de contrôle rapide pour garantir la propreté et la fiabilité de votre code :

  • Utiliser l'objet fichier comme itérateur par défaut
  • Supprimer les espaces blancs de manière intentionnelle, et non automatique
  • Veuillez éviter de charger des fichiers entiers, sauf si cela est nécessaire.
  • Gérer explicitement les encodages lors du traitement de texte

Ces pratiques s'étendent des scripts rapides aux pipelines de production.

Conclusion

Lorsqu'il s'agit de lire un fichier ligne par ligne en Python, il existe une méthode par défaut claire : itérer directement sur l'objet fichier. Il est simple, économe en mémoire et suffisamment expressif pour traiter tout type de fichiers, des petits fichiers texte aux journaux volumineux.

La conception de Python rend ce modèle intuitif. Vous n'avez pas besoin d'utilitaires spéciaux ni de logique complexe, car le langage gère les aspects complexes à votre place. La plupart des problèmes ne proviennent pas de Python lui-même, mais d'une complication excessive d'une tâche qui dispose déjà d'une solution claire.

Adoptez l'approche basée sur l'itérateur, soyez attentif aux espaces blancs et aux encodages, et votre code de lecture de fichiers restera lisible et facile à comprendre.

Questions fréquentes

La lecture d'un fichier ligne par ligne est-elle toujours plus lente que sa lecture en une seule fois ?

Non. En réalité, pour les fichiers volumineux, la lecture ligne par ligne est souvent plus rapide dans l'ensemble, car elle évite la pression sur la mémoire. Le chargement d'un fichier entier en mémoire peut ralentir votre programme ou provoquer son blocage, tandis que l'itération ligne par ligne maintient une utilisation constante de la mémoire.

Pourquoi Python inclut-il des caractères de nouvelle ligne (\n) dans chaque ligne ?

Parce que Python conserve le fichier exactement tel qu'il existe sur le disque. Les sauts de ligne font partie des données et ne constituent pas une mise en forme ajoutée ultérieurement. Cela rend la lecture des fichiers prévisible et flexible : vous décidez quand et comment nettoyer le texte, au lieu que Python le fasse à votre place.

Dois-je systématiquement utiliser strip() lors de la lecture des lignes ?

Pas systématiquement. Veuillez utiliser strip() lorsque vous traitez des valeurs, comparez des chaînes de caractères ou nettoyez des entrées. Veuillez éviter cette pratique lorsque les espaces blancs ont une signification, par exemple dans les journaux, les textes formatés, les fichiers à largeur fixe ou les extraits de code.

La fonction readline() est-elle plus efficace que la boucle « for line in file » ?

Rarement, mais parfois. L'attribut « readline() » est pertinent lorsque la lecture doit s'arrêter de manière conditionnelle ou interactive. Pour la plupart des tâches de traitement par lots, la boucle standard est plus claire, plus sûre et tout aussi efficace.

Considérez readline() comme un outil pour les cas particuliers, et non comme un substitut général.

Quelle est l'erreur la plus fréquente commise par les personnes qui lisent des fichiers ligne par ligne ?

Rendre les choses trop complexes. La plupart des erreurs proviennent du chargement inutile de fichiers entiers, d'une mauvaise gestion des encodages ou de l'ajout de compteurs manuels et d'états alors que Python fournit déjà une solution efficace.

Sujets

Apprenez Python avec DataCamp

Cursus

Développeur associé Python

32 h
Apprenez Python pour le développement de logiciels, de l'écriture de fonctions à la définition de classes. Acquérir les compétences nécessaires pour lancer votre carrière de développeur !
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow