
Lire un fichier ligne par ligne ou en entier
Apprenez à lire le contenu d'un fichier texte en Python, soit ligne par ligne (avec une boucle 'for' ou 'readline'), soit en entier (avec 'read'). Découvrez les avantages et inconvénients de chaque méthode.
Lire un fichier en entier : la méthode read()
La méthode `read()` d'un objet fichier permet de lire tout le contenu du fichier d'un seul coup et de le retourner sous forme de chaîne de caractères (en mode texte) ou de bytes (en mode binaire).
Syntaxe :
with open("mon_fichier.txt", "r", encoding="utf-8") as fichier:
contenu = fichier.read()
# contenu contient maintenant tout le contenu du fichier
print(contenu)Vous pouvez aussi spécifier un nombre maximum d'octets/caractères à lire :
with open('fichier.txt', 'r') as f:
partie1 = f.read(1024) # Lit au maximum 1024 octets/caractères
partie2 = f.read(512) # Lit 512 suivantsAvantages de `read()` :
- Simple et rapide pour lire des petits fichiers.
Inconvénients de `read()` :
- Peut consommer beaucoup de mémoire si le fichier est très grand, car tout le contenu est chargé en mémoire en une seule fois.
- N'est pas adapté pour traiter les fichiers ligne par ligne.
Lire un fichier ligne par ligne : la boucle for
La manière la plus simple et la plus efficace de lire un fichier ligne par ligne en Python est d'utiliser une boucle `for` directement sur l'objet fichier.
En effet, un objet fichier est un *itérable* qui produit les lignes du fichier une par une.
Syntaxe :
with open("mon_fichier.txt", "r", encoding="utf-8") as fichier:
for ligne in fichier:
# Traiter la ligne courante
print(ligne)Avantages de la boucle `for` :
- Simple et lisible.
- Efficace en mémoire : seule une ligne est chargée en mémoire à la fois (évaluation paresseuse). Cela permet de traiter de très grands fichiers sans saturer la mémoire.
- Pythonique : C'est la manière idiomatique de lire un fichier ligne par ligne en Python.
Notez que chaque `ligne` inclut le caractère de fin de ligne (`\n` en général). Vous pouvez utiliser `ligne.strip()` pour supprimer les espaces et les caractères de fin de ligne au début et à la fin de la ligne.
Lire une ligne spécifique : readline()
La méthode `readline()` lit une seule ligne du fichier (jusqu'au prochain caractère de fin de ligne `\n`, ou jusqu'à la fin du fichier).
Elle retourne la ligne lue sous forme de chaîne de caractères (en mode texte) ou de bytes (en mode binaire), en incluant le caractère de fin de ligne (sauf si la fin du fichier est atteinte).
with open("mon_fichier.txt", "r", encoding="utf-8") as fichier:
ligne1 = fichier.readline()
ligne2 = fichier.readline()
# ...
print(ligne1) # Première ligne (avec le \n à la fin)
print(ligne2)`readline()` retourne une chaîne vide (`''`) si la fin du fichier est atteinte.
Vous pouvez utiliser `readline()` dans une boucle `while` pour lire toutes les lignes du fichier, mais la boucle `for` est généralement plus simple et plus efficace.
Lire toutes les lignes dans une liste : readlines()
La méthode `readlines()` lit toutes les lignes du fichier et les retourne sous forme d'une *liste* de chaînes de caractères (en mode texte) ou de bytes (en mode binaire). Chaque élément de la liste correspond à une ligne du fichier, en incluant le caractère de fin de ligne (`\n` en général).
Syntaxe :
with open("mon_fichier.txt", "r", encoding="utf-8") as fichier:
lignes = fichier.readlines()
# lignes est maintenant une liste de chaînes de caractères
for ligne in lignes:
print(ligne)Avantages de `readlines()` :
- Pratique si vous avez besoin d'accéder à plusieurs lignes à la fois, ou si vous devez traiter les lignes dans un ordre différent de celui du fichier.
Inconvénients de `readlines()` :
- Peut consommer beaucoup de mémoire si le fichier est très grand, car toutes les lignes sont chargées en mémoire en une seule fois.
Il est *généralement préférable* d'utiliser une boucle `for` directement sur l'objet fichier (plus efficace en mémoire) plutôt que `readlines()`, sauf si vous avez *vraiment* besoin d'avoir toutes les lignes dans une liste.
Choisir la bonne méthode : récapitulatif
Voici un récapitulatif pour choisir la méthode de lecture appropriée :
- `read()` : Pour lire tout le contenu du fichier d'un coup, dans une seule chaîne (ou un seul objet `bytes`). Convient pour les petits fichiers.
- Boucle `for` sur l'objet fichier : Pour lire le fichier ligne par ligne. C'est la méthode la plus courante, la plus simple et la plus efficace en mémoire. Convient pour les fichiers de toute taille.
- `readline()` : Pour lire une seule ligne à la fois. Moins courant que la boucle `for`.
- `readlines()` : Pour lire toutes les lignes du fichier et les stocker dans une liste. Peut consommer beaucoup de mémoire si le fichier est grand. A utiliser uniquement si vous avez besoin d'avoir toutes les lignes dans une liste.
Dans la grande majorité des cas, la boucle `for` sur l'objet fichier est la méthode recommandée pour lire un fichier texte ligne par ligne.