Чтение файла с конца
Как прочесть файл начиная с конца?
А очень просто!
Собственно суть реализации.
-
Ставим файловый указатель в конец файла
-
Читаем по одному символу увеличивая смещение относительно конца файла
-
Как только символ является символом переноса строки, читаем всю строку после символа
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
Отзывов: 0
Оставить комментрий