Прочитайте последнюю строку файла - PullRequest
3 голосов
/ 29 ноября 2008

Представьте, что у меня есть файл с

Xpto,50,30,60
Xpto,a,v,c
Xpto,1,9,0
Xpto,30,30,60

этот текстовый файл может быть добавлен много раз, и когда я открываю файл, я хочу получить только значения последней строки текстового файла ... Как я могу это сделать на python? читать последнюю строку?

Ответы [ 4 ]

10 голосов
/ 29 ноября 2008

Я думаю, что мой ответ от в прошлый раз, когда это прозвучало , к сожалению, был упущен. : -)

Если вы используете Unix-систему, os.popen("tail -10 " + filepath).readlines() вероятно будь самым быстрым способом. В противном случае это зависит от того, насколько надежным вы хотите быть. Методы, предложенные до сих пор, все падают, так или иначе. Для надежности и скорости в большинстве общий случай, который вы, вероятно, хотите что-то вроде логарифмического поиска: используйте file.seek, чтобы перейти в конец файла минус 1000 символов, прочитайте это, проверьте, сколько строк в нем содержится, затем до EOF минус 3000 символов, читайте в 2000 символов, считать строки, затем EOF минус 7000, прочитано в 4000 символы, считать строки и т. д. пока у вас не будет столько строк, сколько вы необходимость. Но если вы точно знаете, что это всегда будет работать на файлах с разумной длиной линии, вы можете не нужно это.

Вы также можете найти вдохновение в исходном коде для Unix tail команда.

1 голос
/ 29 ноября 2008

f.seek( pos ,2) стремится к положению относительно конца файла. попробуйте разумное значение для pos, затем readlines () и получите последнюю строку.

Вы должны учитывать, когда 'pos' не является хорошим предположением, т.е. предположим, что вы выбрали 300, но последняя строка длиной 600 символов! в этом случае, попробуйте еще раз с разумным предположением, пока вы не захватите всю строку. (этот худший случай должен быть очень редким)

0 голосов
/ 16 апреля 2012

Хм, почему бы просто не поискать конец файла и не прочитать его, пока вы не нажмете на новую строку?.

i=0
while(1):
    f.seek(i, 2)
    c = f.read(1)
    if(c=='\n'):
        break
0 голосов
/ 29 ноября 2008

Не уверен насчет реализации, специфичной для Python, но в более не зависящей от языка манере, вы бы хотели пропустить (искать) до конца файла, а затем прочитать каждый символ в обратном порядке, пока не дойдете до строки символ фида, который использует ваш файл, обычно это символ со значением 13. просто прочитайте вперед от этой точки до конца файла, и у вас будет последняя строка в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...