Найти - Пользователи
Полная версия: работа с текстовым файлом
Начало » Python для новичков » работа с текстовым файлом
1 2
solomon243
как прочитать последние 10 строк текстового файла?? seek() вроде как не дает нужного эффекта, сдвигает только на n байт…
4kpt
Файл очень большой?
solomon243
да несколько десятков Мб. Не хочется readlines() - повлияет на производительность же.
py.user.next
solomon243
seek() вроде как не дает нужного эффекта
придётся с конца считать переводы строк
4kpt
Я тоже так думал, но неужели нет лучше решения?
Думал так:
1. Меряем размер файла модулем os.path.getsize
2. Методом seek(размер - что_то) переходим почти к концу файла.
3. Получаем остатки от файла методом read()
4. Проверяем, сколько там переводов строк (“\n”).
4.1 Если меньше 10, нужно резать еще.
4.2 Если больше - выбираем нужные строки.
ilnur
недавно смотрел модуль itertools.
там есть штука, которая из итерируемого объекта создает несколько генераторов. Которые как бы одновременно работают. Но при этом можно один из генераторов смещать.

И вот что я думаю. Может из файла сделать два генератора. Второй сместить на 10 пунктов. Пройтись по генераторам. И когда второй дойдет до конца. То первый уже прочитает оставшиеь 10 строк.
solomon243
py.user.next
Думал об этом. Но может каким- то образом итераторы использовать? Неужели такая задача столь сложна в реализации на Питоне??
bismigalis
однозначного решения нет http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail
bismigalis
solomon243
Неужели такая задача столь сложна в реализации на Питоне??
ничего сложного, как сказал 4kpt отрезаем кусок, считаем, если нехватает дорезаем, goto 2
Alen
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB