Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 1, 2013 22:00:18

solomon243
От:
Зарегистрирован: 2012-02-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с текстовым файлом

как прочитать последние 10 строк текстового файла?? seek() вроде как не дает нужного эффекта, сдвигает только на n байт…



Офлайн

#2 Авг. 1, 2013 22:18:41

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

работа с текстовым файлом

Файл очень большой?



Офлайн

#3 Авг. 1, 2013 22:24:28

solomon243
От:
Зарегистрирован: 2012-02-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с текстовым файлом

да несколько десятков Мб. Не хочется readlines() - повлияет на производительность же.



Офлайн

#4 Авг. 1, 2013 22:43:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

работа с текстовым файлом

solomon243
seek() вроде как не дает нужного эффекта
придётся с конца считать переводы строк



Офлайн

#5 Авг. 1, 2013 23:07:09

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

работа с текстовым файлом

Я тоже так думал, но неужели нет лучше решения?
Думал так:
1. Меряем размер файла модулем os.path.getsize
2. Методом seek(размер - что_то) переходим почти к концу файла.
3. Получаем остатки от файла методом read()
4. Проверяем, сколько там переводов строк (“\n”).
4.1 Если меньше 10, нужно резать еще.
4.2 Если больше - выбираем нужные строки.



Отредактировано 4kpt (Авг. 1, 2013 23:15:58)

Офлайн

#6 Авг. 2, 2013 07:04:48

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

работа с текстовым файлом

недавно смотрел модуль itertools.
там есть штука, которая из итерируемого объекта создает несколько генераторов. Которые как бы одновременно работают. Но при этом можно один из генераторов смещать.

И вот что я думаю. Может из файла сделать два генератора. Второй сместить на 10 пунктов. Пройтись по генераторам. И когда второй дойдет до конца. То первый уже прочитает оставшиеь 10 строк.

Офлайн

#7 Авг. 2, 2013 12:26:10

solomon243
От:
Зарегистрирован: 2012-02-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с текстовым файлом

py.user.next
Думал об этом. Но может каким- то образом итераторы использовать? Неужели такая задача столь сложна в реализации на Питоне??



Офлайн

#8 Авг. 2, 2013 12:41:21

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

работа с текстовым файлом

Офлайн

#9 Авг. 2, 2013 12:50:35

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

работа с текстовым файлом

solomon243
Неужели такая задача столь сложна в реализации на Питоне??
ничего сложного, как сказал 4kpt отрезаем кусок, считаем, если нехватает дорезаем, goto 2

Офлайн

#10 Авг. 2, 2013 13:47:08

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

работа с текстовым файлом

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version