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