174 votes

Lire un fichier dans l'ordre inverse à l'aide de python

Comment lire un fichier dans l'ordre inverse à l'aide de python? Je veux lire un fichier à partir de la dernière ligne à la première ligne. Quelqu'un peut-il m'aider?

Merci d'avance, Nimmy

190voto

srohde Points 41

Une bonne, réponse efficace à l'écrit comme un générateur.

import os


def reverse_readline(filename, buf_size=8192):
    """a generator that returns the lines of a file in reverse order"""
    with open(filename) as fh:
        segment = None
        offset = 0
        fh.seek(0, os.SEEK_END)
        total_size = remaining_size = fh.tell()
        while remaining_size > 0:
            offset = min(total_size, offset + buf_size)
            fh.seek(-offset, os.SEEK_END)
            buffer = fh.read(min(remaining_size, buf_size))
            remaining_size -= buf_size
            lines = buffer.split('\n')
            # the first line of the buffer is probably not a complete line so
            # we'll save it and append it to the last line of the next buffer
            # we read
            if segment is not None:
                lines[-1] += segment
            segment = lines[0]
            for index in range(len(lines) - 1, 0, -1):
                yield lines[index]
        yield segment

94voto

Matt Joiner Points 29194
for line in reversed(open("filename").readlines()):
    print line.rstrip()

Et en Python 3:

for line in reversed(list(open("filename"))):
    print(line.rstrip())

8voto

import re

def filerev(somefile, buffer=0x20000):
  somefile.seek(0, os.SEEK_END)
  size = somefile.tell()
  lines = ['']
  rem = size % buffer
  pos = max(0, (size // buffer - 1) * buffer)
  while pos >= 0:
    somefile.seek(pos, os.SEEK_SET)
    data = somefile.read(rem + buffer) + lines[0]
    rem = 0
    lines = re.findall('[^\n]*\n?', data)
    ix = len(lines) - 2
    while ix > 0:
      yield lines[ix]
      ix -= 1
    pos -= buffer
  else:
    yield lines[0]

with open(sys.argv[1], 'r') as f:
  for line in filerev(f):
    sys.stdout.write(line)

7voto

ghostdog74 Points 86060
for line in reversed(open("file").readlines()):
    print line.rstrip()

Si vous êtes sous linux, vous pouvez utiliser tac commande.

$ tac file

2 recettes que vous pouvez trouver dans ActiveState ici et ici

6voto

Darius Bacon Points 9741

J'ai posté une réponse qui lit le fichier de manière incrémentale, en réponse à moyen le Plus efficace pour la recherche cours des x dernières lignes d'un fichier en python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X