1. À propos de readlines()
La méthode readlines() est une fonction intégrée des objets fichier en Python.
Elle lit l'intégralité du fichier et retourne une liste de chaînes :
chaque élément de la liste correspond à une ligne du fichier (le caractère de saut de ligne \n est conservé).
C’est pratique pour manipuler rapidement un petit fichier, mais attention à la mémoire avec des fichiers volumineux.
Exemple basique : lisons un petit fichier exemple.txt avec readlines().
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# On simule un fichier avec une chaîne multiligne (comme si on lisait un vrai fichier) from io import StringIO contenu_fictif = "ligne 1\nligne 2\nligne 3\n" fichier = StringIO(contenu_fictif) # simule open('exemple.txt') lignes = fichier.readlines() print(lignes) fichier.close() # Sortie (output) : # ['ligne 1\n', 'ligne 2\n', 'ligne 3\n'] |
2. Utilisation avec un vrai fichier et gestion propre (with+ readlines()
En pratique, on utilise presque toujours l’instruction with (gestionnaire de contexte).
Elle garantit la fermeture automatique du fichier, même en cas d’erreur.
Voici comment ouvrir un fichier data.txt et récupérer toutes ses lignes grâce à readlines().
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Créons d'abord un vrai fichier temporaire pour l'exemple with open('data.txt', 'w', encoding='utf-8') as f: f.write("première ligne\n") f.write("deuxième ligne avec des mots\n") f.write("troisième ligne — fin\n") # Maintenant lecture avec readlines() dans un bloc 'with' with open('data.txt', 'r', encoding='utf-8') as f: toutes_lignes = f.readlines() print(toutes_lignes) # Sortie (output) : # ['première ligne\n', 'deuxième ligne avec des mots\n', 'troisième ligne — fin\n'] |
2.1 Nettoyer les lignes avec strip()
Les lignes lues conservent le caractère de saut de ligne \n. Pour les traiter sans ce caractère,
on combine souvent readlines() avec strip() (ou rstrip()) dans une compréhension de liste.
|
1 2 3 4 5 6 7 |
with open('data.txt', 'r', encoding='utf-8') as f: lignes_propres = [ligne.rstrip('\n') for ligne in f.readlines()] print(lignes_propres) # Sortie (output) : # ['première ligne', 'deuxième ligne avec des mots', 'troisième ligne — fin'] |
3. Paramètre optionnel sizehint - contrôle approximatif de la mémoire
La méthode readlines() accepte un argument optionnel sizehint (nombre entier).
Si fourni, readlines(sizehint) lit environ sizehint octets, puis retourne les lignes
complètes qui tiennent dans cette limite. Utile pour ne pas saturer la mémoire sur des fichiers énormes,
tout en gardant une lecture par blocs.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Fichier un peu plus long pour illustrer sizehint with open('long.txt', 'w', encoding='utf-8') as f: for i in range(1, 21): # 20 lignes f.write(f"ligne numéro {i} : contenu variable\n") # On lit par blocs d'environ 100 octets with open('long.txt', 'r', encoding='utf-8') as f: bloc1 = f.readlines(100) bloc2 = f.readlines(100) # la lecture continue où on s'était arrêté bloc3 = f.readlines(100) print("Bloc 1 :", bloc1) print("Bloc 2 :", bloc2[:2]) # on affiche juste un extrait pour lisibilité print("Bloc 3 (reste) :", len(bloc3), "lignes") # Sortie (output) : (les nombres exacts dépendent de la longueur des lignes) # Bloc 1 : ['ligne numéro 1 : contenu variable\n', 'ligne numéro 2 : contenu variable\n', 'ligne numéro 3 : contenu variable\n'] # Bloc 2 : ['ligne numéro 4 : contenu variable\n', 'ligne numéro 5 : contenu variable\n'] # Bloc 3 (reste) : 15 lignes |
4. Comparaison avec readline() et itération directe
Il ne faut pas confondre readlines() avec readline() (singulier) ou
avec l’itération directe sur l’objet fichier. readline() lit une seule ligne,
tandis que l’itération avec for ligne in f est souvent plus efficace en mémoire pour les gros fichiers,
car elle ne charge qu’une ligne à la fois.
4.1 readline() — une ligne à la fois
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
with open('data.txt', 'r', encoding='utf-8') as f: ligne_a = f.readline() ligne_b = f.readline() ligne_c = f.readline() print("readline 1:", ligne_a, end="") # end="" car le \n est déjà dans la ligne print("readline 2:", ligne_b, end="") print("readline 3:", ligne_c, end="") # Sortie (output) : # readline 1: première ligne # readline 2: deuxième ligne avec des mots # readline 3: troisième ligne — fin |
4.2 Itération directe (recommandée pour fichiers volumineux)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Au lieu de tout charger en mémoire avec readlines(), on itère ligne par ligne with open('long.txt', 'r', encoding='utf-8') as f: compteur = 0 for ligne in f: if compteur < 3: # affichage des 3 premières seulement print(f"ligne {compteur+1}: {ligne.rstrip()}") compteur += 1 print(f"Nombre total de lignes lues : {compteur}") # Sortie (output) : # ligne 1: ligne numéro 1 : contenu variable # ligne 2: ligne numéro 2 : contenu variable # ligne 3: ligne numéro 3 : contenu variable # Nombre total de lignes lues : 20 |
En résumé : readlines() est idéal pour charger rapidement un petit fichier en liste.
Pour les fichiers énormes, préférez l’itération directe (for ligne in f) afin de ne pas saturer la mémoire.
Le paramètre sizehint offre un compromis intermédiaire.
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/



