Python >> Tutoriel Python >  >> Python

Comment lire les N premières lignes d'un fichier en Python ?

Formulation du problème

Étant donné un nom de fichier et un entier n .

Comment lire le premier n lignes du fichier dans votre script Python ?

Voici un aperçu des solutions :

Méthode 1 :Stocker Head dans une liste de chaînes

Pour lire le premier n lignes d'un fichier donné et stocker chaque ligne dans une liste de chaînes, vous pouvez utiliser l'expression de compréhension de liste [next(file) for x in range(n)] .

  • L'expression next(file) obtient la ligne suivante du fichier.
  • Le contexte for x in range(n) répète ce n fois.

Voici un script de code dans un fichier 'code.py' qui lit le premier n=4 lignes de lui-même :

n = 4
filename = 'code.py'

with open(filename) as my_file:
    head = [next(my_file) for x in range(n)]
    
print(head)

La sortie est :

['n = 4\n', "filename = 'code.py'\n", '\n', 'with open(filename) as my_file:\n']

Méthode 2 :stocker Head dans une chaîne

Vous pouvez également stocker les n premières lignes d'un fichier dans une seule chaîne en utilisant l'idée suivante :

  • Créer une variable de chaîne vide head = ''
  • Ouvrir le fichier avec open(filename)
  • Itérer n fois en utilisant une boucle for
  • Ajout de la ligne suivante du fichier à la fin de l'en-tête de chaîne à l'aide de la concaténation de chaînes.

Voici le code spécifique :

n = 4
filename = 'code.py'

head = ''
with open(filename) as my_file:
    for x in range(n):
        head += next(my_file)
    
print(head)

Le print() la fonction donne la sortie suivante :

n = 4
filename = 'code.py'
head = ''

Méthode 3 :découpage et readlines()

Si les performances ne sont pas un problème pour vous, vous pouvez lire l'intégralité du fichier en utilisant le readlines() fonction, puis utilisez le découpage pour accéder uniquement au premier n lignes. Par exemple, file.readlines()[:n] renverrait une liste des n premières lignes dans le file .

n = 4
filename = 'code.py'

with open(filename) as file:
    head = file.readlines()[:n]
    print(head)

Le résultat de cet extrait de code est :

['n = 4\n', "filename = 'code.py'\n", '\n', 'with open(filename) as file:\n']

Ce n'est pas une façon très performante de lire l'en-tête d'un fichier car vous lisez d'abord tout le fichier avant de tout jeter sauf le premier n lignes. Ainsi, vous ne devez l'utiliser que si les fichiers sont relativement petits et que vous ne vous souciez pas trop des performances.

Pour apprendre tout ce que vous devez savoir sur le tranchage, consultez mon livre "Coffee Break Python Slicing" - fourni avec mon livre populaire "Coffee Break Python" ici pour un prix raisonnable. 🙂

Méthode 4 :Pandas

Une solution simple et directe qui ne nécessite pas d'E/S de fichier explicite est fournie par la bibliothèque pandas. Pour lire le premier n lignes d'un fichier, vous pouvez utiliser l'appel pandas pd.read_csv(filename, nrows=n) .

Par exemple, pour lire les cinq premières lignes du fichier 'file.csv' , les deux lignes suivantes feront l'affaire :

import pandas as pd
head = pd.read_csv('file.csv', nrows=5)

Vous pouvez consulter mon livre "Coffee Break Pandas" pour devenir un expert des pandas en utilisant une approche d'apprentissage amusante basée sur des puzzles.