Прочтите последнюю строку файла

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

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

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

Дубликат stackoverflow.com/questions/260273/…

S.Lott 29.11.2008 23:05

Смотрите ответ на этот вопрос: stackoverflow.com/questions/260273/….

Robert Gamble 29.11.2008 21:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
5 102
4

Ответы 4

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

Чтение одного символа в обратном направлении от конца файла требует больших затрат на В самом деле. Подумайте, что вам нужно сделать, чтобы это произошло.

Dustin 29.11.2008 21:59

Не уверен, насколько медленно это будет в реальной жизни. ОС, вероятно, все равно оптимизирует его, когда вы выбираете один байт, он, вероятно, заменяет целый сектор с жесткого диска в память. Может даже меньше сектора читать? Если ваша последняя строка не содержит много секторов, вы, вероятно, не заметите замедления.

Kibbee 30.11.2008 22:22

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

If you're on a unix box, os.popen("tail -10 " + filepath).readlines() will probably be the fastest way. Otherwise, it depends on how robust you want it to be. The methods proposed so far will all fall down, one way or another. For robustness and speed in the most common case you probably want something like a logarithmic search: use file.seek to go to end of the file minus 1000 characters, read it in, check how many lines it contains, then to EOF minus 3000 characters, read in 2000 characters, count the lines, then EOF minus 7000, read in 4000 characters, count the lines, etc. until you have as many lines as you need. But if you know for sure that it's always going to be run on files with sensible line lengths, you may not need that.

You might also find some inspiration in the source code for the unix tail command.

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

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

Почему бы просто не перейти к концу файла и не читать, пока не дойдете до новой строки?

i=0
while(1):
    f.seek(i, 2)
    c = f.read(1)
    if (c=='\n'):
        break

Другие вопросы по теме