Форум сайта python.su
как прочитать последние 10 строк текстового файла?? seek() вроде как не дает нужного эффекта, сдвигает только на n байт…
Офлайн
Файл очень большой?
Офлайн
да несколько десятков Мб. Не хочется readlines() - повлияет на производительность же.
Офлайн
solomon243придётся с конца считать переводы строк
seek() вроде как не дает нужного эффекта
Офлайн
Я тоже так думал, но неужели нет лучше решения?
Думал так:
1. Меряем размер файла модулем os.path.getsize
2. Методом seek(размер - что_то) переходим почти к концу файла.
3. Получаем остатки от файла методом read()
4. Проверяем, сколько там переводов строк (“\n”).
4.1 Если меньше 10, нужно резать еще.
4.2 Если больше - выбираем нужные строки.
Отредактировано 4kpt (Авг. 1, 2013 23:15:58)
Офлайн
недавно смотрел модуль itertools.
там есть штука, которая из итерируемого объекта создает несколько генераторов. Которые как бы одновременно работают. Но при этом можно один из генераторов смещать.
И вот что я думаю. Может из файла сделать два генератора. Второй сместить на 10 пунктов. Пройтись по генераторам. И когда второй дойдет до конца. То первый уже прочитает оставшиеь 10 строк.
Офлайн
py.user.nextДумал об этом. Но может каким- то образом итераторы использовать? Неужели такая задача столь сложна в реализации на Питоне??
Офлайн
однозначного решения нет http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail
Офлайн
solomon243ничего сложного, как сказал 4kpt отрезаем кусок, считаем, если нехватает дорезаем, goto 2
Неужели такая задача столь сложна в реализации на Питоне??
Офлайн
https://pypi.python.org/pypi?%3Aaction=search&term=tail&submit=search
$sudo pip install tailer
import tailer with open('/var/log/syslog') as f: tailer.tail(f,lines=10)
Отредактировано Alen (Авг. 2, 2013 13:47:28)
Офлайн