Lire des fichiers avec Python

Introduction

Pour travailler avec des données stockées, la gestion des fichiers devient la connaissance de base de tout programmeur Python professionnel. Dès sa première version, la lecture et l'écriture de données dans des fichiers sont des fonctionnalités Python intégrées. En comparaison avec d'autres langages de programmation comme C ou Java, il est assez simple et ne nécessite que quelques lignes de code. De plus, aucun module supplémentaire ne doit être chargé pour le faire correctement.

Dans cet article, nous expliquerons comment lire des fichiers avec Python à travers des exemples. Certains exemples incluent la lecture d'un fichier ligne par ligne, sous forme de bloc (un nombre défini de lignes à la fois) et la lecture d'un fichier en une seule fois. De plus, nous vous montrerons un moyen de lire une ligne spécifique du fichier, uniquement, sans rechercher l'intégralité du fichier.

Bases des fichiers en Python

Les méthodes courantes d'utilisation des fichiers sont open() ouvrir un dossier, seek() pour définir la position actuelle du fichier à l'offset donné, et close() pour fermer l'objet fichier lorsque vous avez fini de l'utiliser. L'intégré open() La fonction renvoie un descripteur de fichier qui représente un objet fichier à utiliser pour accéder au fichier en lecture, écriture ou ajout.

Lors de l'ouverture d'un fichier en lecture, Python a besoin de savoir exactement comment le fichier doit être ouvert avec le système. Deux modes d'accès sont disponibles : lecture et lecture en mode binaire. Les drapeaux respectifs utilisés sont 'r'et 'rb', et doivent être spécifiés lors de l'ouverture d'un fichier avec la fonction intégrée open() fonction. Le premier mode comprend l'interprétation de caractères spéciaux comme "CR" (retour chariot) et "LF" (saut de ligne) pour représenter les sauts de ligne, tandis que le mode binaire vous permet de lire les données en mode brut - où les données sont stockées telles quelles. sans autre interprétation.

Une fois que vous avez ouvert un fichier, le open() fonction vous renverra un objet fichier. Ces objets de fichier ont des méthodes comme read(), readline(), write(), tell()et seek(). Bien que certains objets de fichier (ou objets de type fichier) aient plus de méthodes que celles répertoriées ici, ce sont les plus courantes. Tous les objets de fichier n'ont pas besoin d'implémenter toutes les méthodes de fichier.

Lire un fichier ligne par ligne

Le premier exemple est inspiré des deux langages de programmation - C et C++. C'est probablement l'approche la plus intuitive - ouvrez le fichier à l'aide de la open() fonction, lire le fichier ligne par ligne utilisant l' readline() méthode et sortir la ligne immédiatement après la lecture.

En cours d'utilisation voici un while boucle qui lit en continu à partir du fichier tant que le readline() La méthode continue de renvoyer des données. Si la fin du fichier (EOF) est atteinte, le while la boucle s'arrête et l'objet fichier est fermé, libérant les ressources pour que d'autres programmes puissent les utiliser :


filename = "test.txt"

filehandle = open(filename, 'r')
while True:
    
    line = filehandle.readline()
    if not line:
        break
    print(line)


filehandle.close()

Comme vous l'avez peut-être remarqué, nous avons explicitement ouvert et fermé le fichier dans cet exemple. Bien que l'interpréteur Python ferme automatiquement les fichiers ouverts à la fin de l'exécution du programme Python, fermant explicitement le fichier via close() est un bon style de programmation et ne doit pas être oublié.

En guise d'amélioration, la protocole itérateur pratique a été introduit dans Python 2.3. Cela vous permet de simplifier la readline boucle:


filename = "test.txt"
for line in open(filename, 'r'):
    print(line)

En cours d'utilisation voici un for boucle en combinaison avec le in itérateur. La ligne courante est identifiée à l'aide de la in itérateur, lu à partir du fichier, et son contenu est sorti vers stdout. Python couvre l'ouverture et la fermeture du fichier pour vous lorsqu'il est hors de portée. Bien qu'inefficace, cela vous permet de ne plus avoir à gérer les descripteurs de fichiers.

Malheureusement, le code ci-dessus est moins explicite et s'appuie sur le ramasse-miettes interne de Python pour gérer la fermeture du fichier.

Introduit dans Python 2.5, le with La commande encapsule encore plus l'ensemble du processus et gère également l'ouverture et la fermeture des fichiers une seule fois tout au long du bloc de code étendu :


filename = "test.txt"
with open(filename, 'r') as filehandle:
    for line in filehandle:
        print(line)

La combinaison du with déclaration et le open() La commande ouvre le fichier une seule fois. En cas de succès le for boucle est exécutée et le contenu de la ligne est imprimé sur stdout.

De plus, l'utilisation de la with déclaration a un effet secondaire. En interne, l'interpréteur Python crée un try-finally-block pour encapsuler la lecture du fichier. L'exemple suivant montre ce qui se passe essentiellement en interne dans Python avec le with blocs de code :

try:
    filehandle = open(filename, 'r')
    
finally:
    filehandle.close()

Lecture d'un fichier sous forme de blocs de lignes

Jusqu'à présent, nous avons traité un dossier ligne par ligne. C'est plutôt lent pour les fichiers volumineux et peut être amélioré en lisant plusieurs lignes en même temps. Pour y parvenir, le islice() méthode de la itertools le module entre en jeu. En outre, il fonctionne comme un itérateur et renvoie un bloc de données composé de n lignes. A la fin du fichier, le résultat peut être plus court, et finalement, l'appel retournera une liste vide :

from itertools import islice

filename = "test.txt"

number_of_lines = 5

with open(filename, 'r') as input_file:
    lines_cache = islice(input_file, number_of_lines)
   
    for current_line in lines_cache:
        print (current_line)

Lecture d'une ligne spécifique à partir d'un fichier

En utilisant les méthodes présentées ci-dessus, nous pouvons également effectuer d'autres actions utiles, comme lire une ligne spécifique à partir d'un fichier. Pour ce faire, nous utilisons un compteur et imprimons la ligne appropriée lorsque nous y arrivons lors de l'itération dans le fichier :


filename = "test.txt"

line_number = 3
print (f"line {line_number} of {filename} is: ")

with open(filename, 'r') as filehandle:
current_line = 1
    for line in filehandle:
        if current_line == line_number:
            print(line)
            break
        current_line += 1

Cela devrait être simple à comprendre, mais c'est un peu plus long que les exemples précédents. Il peut être raccourci à l'aide de la cache de ligne module.

L'exemple suivant montre comment simplifier le code à l'aide de la getline() méthode. Si le numéro de ligne demandé tombe en dehors de la plage de lignes valides dans le fichier, alors le getline() renvoie une chaîne vide à la place :


import linecache

filename = "test.txt"

line_number = 3

line = linecache.getline(filename, line_number)
print (f"line {line_number} of {filename}:")
print (line)

Lire tout le fichier d'un coup

Enfin, nous examinerons un cas très différent de l'exemple précédent - la lecture d'un fichier entier en une seule fois.

Gardez à l'esprit que dans la plupart des cas, vous devez disposer de suffisamment de mémoire pour lire l'intégralité du fichier, car les caractères ne prennent pas trop de place, mais méfiez-vous des fichiers volumineux. L'exemple suivant utilise une combinaison des with déclaration, et le read() méthode. Dans ce cas, nous utiliserons read() pour charger le contenu du fichier sous forme de flux de données :

Consultez notre guide pratique et pratique pour apprendre Git, avec les meilleures pratiques, les normes acceptées par l'industrie et la feuille de triche incluse. Arrêtez de googler les commandes Git et en fait apprendre il!


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.read()
    print (filecontent)

Python offre également le readlines() méthode, qui ressemble à la readline() méthode du premier exemple. Contrairement à read(), le contenu du fichier est stocké dans une liste, où chaque ligne du contenu est un élément :


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.readlines()
    for line in filecontent:
        print (line)

Tandis que readlines() lira le contenu du fichier jusqu'à ce qu'il atteigne EOF, gardez à l'esprit que vous pouvez également limiter la quantité de contenu lu en fournissant le sizehint paramètre, qui est le nombre d'octets à lire.

Conclusion

Comme d'habitude, il existe plusieurs façons de lire le contenu d'un fichier. En termes de vitesse, ils sont tous plus ou moins dans la même catégorie. La solution qui vous convient le mieux dépend de votre cas d'utilisation spécifique. Nous pensons qu'il est très utile de voir ce qui est possible et ensuite de choisir la solution qui convient le mieux.

Bien que Python simplifie grandement le processus de lecture des fichiers, cela peut parfois devenir délicat, auquel cas je vous recommande de jeter un œil au documentation officielle Python pour plus d'informations.

Horodatage:

Plus de Stackabuse