строки - это просто данные, разделенные символом новой строки '\n'
.
1) Поскольку строки имеют переменную длину, вам необходимо прочитать весь файл, чтобы узнать, где находятся символы новой строки, чтобы подсчитать, сколько строк:
count = 0
for line in open('myfile'):
count += 1
print count, line # it will be the last line
2) чтение фрагмента из конца файла - самый быстрый способ найти последний символ новой строки.
def seek_newline_backwards(file_obj, eol_char='\n', buffer_size=200):
if not file_obj.tell(): return # already in beginning of file
# All lines end with \n, including the last one, so assuming we are just
# after one end of line char
file_obj.seek(-1, os.SEEK_CUR)
while file_obj.tell():
ammount = min(buffer_size, file_obj.tell())
file_obj.seek(-ammount, os.SEEK_CUR)
data = file_obj.read(ammount)
eol_pos = data.rfind(eol_char)
if eol_pos != -1:
file_obj.seek(eol_pos - len(data) + 1, os.SEEK_CUR)
break
file_obj.seek(-len(data), os.SEEK_CUR)
Вы можете использовать это так:
f = open('some_file.txt')
f.seek(0, os.SEEK_END)
seek_newline_backwards(f)
print f.tell(), repr(f.readline())