web-dev-qa-db-fra.com

Lire uniquement la première ligne d'un fichier?

Comment voulez-vous obtenir uniquement la première ligne d'un fichier sous forme de chaîne avec Python?

172
harpalss

Utilisez la méthode .readline() ( Docs Python 2 , Docs Python ):

with open('myfile.txt') as f:
    first_line = f.readline()

Quelques notes:

  1. Comme indiqué dans la documentation, à moins que ce ne soit la seule ligne du fichier, la chaîne renvoyée par f.readline() contiendra une nouvelle ligne. Vous souhaiterez peut-être utiliser f.readline().strip() à la place pour supprimer la nouvelle ligne.
  2. L'instruction with ferme automatiquement le fichier à la fin du bloc.
  3. L'instruction with ne fonctionne que dans Python 2.5 et versions ultérieures, et dans Python 2.5, vous devez utiliser from __future__ import with_statement
  4. Dans Python 3, vous devez spécifier l'encodage du fichier que vous ouvrez. Lire plus ...
295
Tor Valamo
infile = open('filename.txt', 'r')
firstLine = infile.readline()
19
Jaelebi
fline=open("myfile").readline().rstrip()
14
ghostdog74

Cela devrait le faire:

f = open('myfile.txt')
first = f.readline()
8
Jarret Hardie

Pour revenir au début d'un fichier ouvert, puis renvoyer la première ligne, procédez comme suit:

my_file.seek(0)
first_line = my_file.readline()
8
dan-gph
first_line = next(open(filename))
7
hoju

Beaucoup d'autres réponses ici, mais pour répondre précisément la question que vous avez posée (avant @MarkAmery a édité la question initiale et modifié le sens):

>>> f = open('myfile.txt')
>>> data = f.read()
>>> # I'm assuming you had the above before asking the question
>>> first_line = data.split('\n', 1)[0]

En d’autres termes, si vous avez déjà lu le fichier (comme vous l’avez dit) et que vous avez un gros bloc de données en mémoire, alors, pour obtenir efficacement la première ligne, effectuez un split () sur le caractère de nouvelle ligne, une fois seulement, et prenez le premier élément de la liste résultante.

Notez que cela n'inclut pas le caractère \n à la fin de la ligne, mais je suppose que vous n'en voulez pas quand même (et un fichier simple ligne peut même n'en avoir aucun). Notez également que bien que ce soit assez court et rapide, il crée une copie des données. Par conséquent, pour une quantité de mémoire vraiment importante, vous ne le jugerez peut-être pas "efficace". Comme toujours, ça dépend ...

6
Peter Hansen