Чтение файла с конца

Как прочесть файл начиная с конца?

А очень просто!

Собственно суть реализации.

  • Ставим файловый указатель в конец файла

  • Читаем по одному символу увеличивая смещение относительно конца файла

  • Как только символ является символом переноса строки, читаем всю строку после символа

    def readline_backward(f):
        """
        Read lines from file, starts from end
        Incoming: file object
        Outgoing: generator
        """
        if f.mode != 'r':
            raise Exception('File should be opened in read mode')
        # get maximum internal file position
        f.seek(0, os.SEEK_END)
        lp = f.tell()
        # set counter considering last carriage return
        i = 2
        while True:
            # get the first line in file
            if i == lp:
                f.seek(0)
                line = f.readline().replace('\n','')
                yield line
            # break if file start was reached
            if i > lp:
                break
            #
            f.seek(-i, os.SEEK_END)
            if f.readline() == '\n':
                line = f.readline()
                line = line.replace('\n', '')
                yield line
            i += 1

Пример использования

    import os
    f = open('test.txt', 'r')
    for line in readline_backward(f):
        print line

Опубликовано в категории IT с тегами

Отзывов: 0


Оставить комментрий