Python: определить, является ли текущая строка в файле последней.

Я читаю файл в Python по очереди, и мне нужно знать, какая строка является последней при чтении, примерно так:

 f = open("myfile.txt")
 for line in f:
    if line is lastline:
       #do smth

Из примеров я обнаружил, что он включает в себя поиск и полное считывание файлов для подсчета строк и т.д. Я могу только заметить, что текущая строка является последней? Я попытался пойти и проверить существование "\n", но во многих случаях последним строкам не следует обратная косая черта N.

Извините, если мой вопрос лишний, поскольку я не нашел ответ на SO

Ответ 1

secondLastLine = None
lastLine = None
with open("myfile.txt") as infile:
    secondLastLine, lastLine = infile.readline(), infile.readline()
    for line in infile:
        # do stuff
        secondLastLine = lastLine
        lastLine = line

# do stuff with secondLastLine

Ответ 2

Проверьте, нет ли строки is последней строки:

with open("in.txt") as f:
    lines = f.readlines()
    last = lines[-1]
    for line in lines:
        if line is last:
            print id(line),id(last)
            # do work on lst line
        else:
            # work on other lines

Если вы хотите, чтобы вторая последняя строка использовала last = lines[-2]

Или просто:

with open("in.txt") as f:
    lines = f.readlines()
    last = lines[-1]
    for line in lines[:-1]:
        # work on all but last line
    # work on last

Ответ 3

import os
path = 'myfile.txt'
size = os.path.getsize(path)
with open(path) as f:
    for line in f:
        size -= len(line)
        if not size:
            print('this is the last line')
            print(line)

Ответ 4

Одна вещь, которую вы могли бы попробовать, - попытаться получить следующую строку и поймать исключение, если оно возникнет, потому что итераторы python AFAIK не имеют встроенного метода hasNext.

Ответ 5

Вы можете использовать itertools парный рецепт;

with open('myfile.txt') as infile:
    a,b = itertools.tee(infile)
    next(b, None)
    pairs = zip(a,b)
    lastPair = None
    for lastPair in pairs:
        pass
secondLastLine = lastPair[0]
# do stuff with secondLastLine

Ответ 6

Это старый вопрос, но если вы хотите разрешить пустые последние строки, это лучше:

with open("myfile.txt") as f:
    while True:
        line = f.readline()
        # do smth
        if line[-1:] != '\n':
            # do smth with the last line
            break

или более читаемый:

with open("myfile.txt") as f:
    while True:
        line = f.readline()
        # do smth
        if not line.endswith('\n'):
            # do smth with the last line
            break