Comment lire un fichier ligne par ligne dans une liste en Python

Jinku Hu 10 octobre 2023
  1. readlines pour lire le fichier ligne par ligne en Python
  2. Itération sur la méthode de fichier pour lire un fichier ligne par ligne en Python
  3. La méthode file.read pour lire le fichier ligne par ligne en Python
  4. Comparaison des différentes méthodes de lecture d’un fichier ligne par ligne en Python
Comment lire un fichier ligne par ligne dans une liste en Python

Supposons que nous ayons un fichier avec le contenu ci-dessous,

Line One: 1
Line Two: 2
Line Three: 3
Line Four: 4
Line Five: 5

Nous devons lire le contenu du fichier ligne par ligne dans une liste, ["Line One: 1", "Line Two: 2", "Line Three: 3", "Line Four: 4", "Line Five: 5"].

Nous allons introduire différentes méthodes pour lire un fichier ligne par ligne dans une liste ci-dessous.

readlines pour lire le fichier ligne par ligne en Python

readlines retourne une liste de lignes du flux.

>>> filePath = r"/your/file/path"
>>> with open(filePath, 'r', encoding='utf-8') as f:
	f.readlines()

	
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']

Le caractère de fin \n est également inclus dans la chaîne et il pourrait être supprimé avec str.rstrip('\n').

>>> with open(filePath, 'r', encoding='utf-8') as f:
	[_.rstrip('\n') for _ in f.readlines()]

	
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']

Itération sur la méthode de fichier pour lire un fichier ligne par ligne en Python

Nous pourrions itérer sur le fichier pour le lire ligne par ligne, plutôt que d’utiliser des readlines.

>>> with open(filePath, 'r', encoding='utf-8') as f:
	[_.rstrip('\n') for _ in f]

	
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']

Cette méthode est bien meilleure que la méthode ci-dessus du point de vue de l’utilisation de la mémoire. La méthode readlines contient toutes les lignes du fichier en mémoire, mais la méthode d’interation ne prend qu’une ligne du contenu du fichier en mémoire et la traite. Il est préférable que la taille du fichier soit très grande pour éviter une MemoryError.

La méthode file.read pour lire le fichier ligne par ligne en Python

file.read(size=-1, /) lit à partir du fichier jusqu’à EOF si size n’est pas défini. Nous pourrions séparer les lignes de ce fichier en utilisant la fonction str.splitlines.

>>> with open(filePath, 'r') as f:
	f.read().splitlines()

	
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']

Le résultat n’inclut pas le caractère de fin \n dans la méthode par défaut str.splitlines. Mais vous pouvez inclure \n si le paramètre keepends est réglé sur True.

>>> with open(filePath, 'r') as f:
	f.read().splitlines(keepends=True)

	
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']

Comparaison des différentes méthodes de lecture d’un fichier ligne par ligne en Python

Nous allons comparer les performances en matière d’efficacité entre les différentes méthodes présentées dans cet article. Nous augmentons le nombre de lignes dans le fichier testé à 8000 pour comparer facilement la différence de performance.

>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
			f.readlines()''',
	      setup='filePath=r"C:\Test\Test.txt"',
	      number = 10000)
16.36330720000001
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
			[_ for _ in f]''',
	      setup='filePath=r"C:\Test\Test.txt"',
	      number = 10000)
18.37279060000003
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
			f.read().splitlines()''',
	      setup='filePath=r"C:\Test\Test.txt"',
	      number = 10000)
12.122660100000019

La méthode readlines() est légèrement meilleure que la méthode d’itération de fichier, et file.read().splitlines() est la méthode la plus efficace avec une marge de plus de 25% par rapport aux deux autres méthodes.

Mais, si dans l’application BigData où la mémoire est le contraignant, la méthode d’itération de fichier est la meilleure comme expliqué ci-dessus.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - Python String