web-dev-qa-db-fra.com

Obtenir la ligne suivante dans un fichier

Je lis dans un fichier et je me demande s'il y a un moyen de lire la ligne suivante dans une boucle for?

Je lis actuellement le fichier comme ceci:

file = open(input,"r").read()
for line in file.splitlines():
  line = doSomething()

Alors, y a-t-il de toute façon que je peux récupérer la ligne suivante du fichier dans cette boucle pour que je puisse effectuer une opération dans la fonction doSomething()?

17
overloading

Il suffit de parcourir le fichier ouvert:

infile = open(input,"r")
for line in infile:
    line = doSomething(line, next(infile))

Étant donné que vous utilisez maintenant le fichier comme itérateur, vous pouvez appeler à tout moment la fonction next() sur la variable infile pour récupérer une ligne supplémentaire.

Deux conseils supplémentaires:

  1. N'appelez pas votre variable file; il masque l'objet de type file intégré en python. Je l'ai nommé infile à la place.

  2. Vous pouvez utiliser le fichier ouvert comme gestionnaire de contexte avec l'instruction with. Il fermera automatiquement le fichier pour vous une fois terminé:

    with open(input,"r") as infile:
        for line in infile:
            line = doSomething(line, next(infile))
    
33
Martijn Pieters
file = open(input,"r").read()
lines =  file.read().splitlines()
for i in range(len(lines)):
     line = lines[i]
     next_line = lines[i+1]
8
Joran Beasley

Je pense que vous voulez dire que si vous êtes en ligne n, vous voulez pouvoir accéder à la ligne n + 1.

La façon la plus simple de le faire est de remplacer

for line in file.splitlines():

avec

lines = file.readlines()
for i in xrange(len(lines)):

alors vous pouvez obtenir la ligne actuelle avec lines[i] et la ligne suivante avec lines[i+1]

la manière la plus pythonique est d'utiliser l'énumération

lines = file.readlines()
for index, line in enumerate(lines):

maintenant vous avez la ligne courante dans "ligne" comme d'habitude, mais vous avez aussi l'index si vous voulez trouver une ligne différente par rapport à elle.

8
BostonJohn