Представьте, что у меня есть файл с
Xpto,50,30,60
Xpto,a,v,c
Xpto,1,9,0
Xpto,30,30,60
этот txt-файл можно добавлять много раз, и когда я открываю файл, я хочу получить только значения последней строки txt-файла ... Как я могу это сделать на python? читаете последнюю строчку?
Смотрите ответ на этот вопрос: stackoverflow.com/questions/260273/….






Не уверен в реализации, специфичной для Python, но в большей степени независимый от языка, что вы хотели бы сделать, это пропустить (искать) до конца файла, а затем читать каждый символ в обратном порядке, пока вы не дойдете до символа перевода строки, который в вашем файле обычно используется символ со значением 13. просто прочтите вперед от этой точки до конца файла, и у вас будет последняя строка в файле.
Чтение одного символа в обратном направлении от конца файла требует больших затрат на В самом деле. Подумайте, что вам нужно сделать, чтобы это произошло.
Не уверен, насколько медленно это будет в реальной жизни. ОС, вероятно, все равно оптимизирует его, когда вы выбираете один байт, он, вероятно, заменяет целый сектор с жесткого диска в память. Может даже меньше сектора читать? Если ваша последняя строка не содержит много секторов, вы, вероятно, не заметите замедления.
Я думаю, что мой ответ от в прошлый раз это подошло был, к сожалению, проигнорирован. :-)
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
tailcommand.
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
Дубликат stackoverflow.com/questions/260273/…