Как считать только первые 10 строк файла?

Как считать первые 10 строк файла и записать их в переменную lines, с которой я потом буду работать. В целом такую же операцию я планирую проводить и с последними 10-ю строками.

name: str = input ("Введите имя входящего файла: ")
f = open (name, "r")  # открываем файл
lines = f.readlines ()  # читаем его построчно
t1 = lines [6]
t2 = lines [-5]
t3 = lines [-6]

Когда я делаю так:

name: str = input ("Введите имя входящего файла: ")
f = open (name, "r")  # открываем файл
lines = f.readlines (1,10)  # читаем его построчно
t1 = lines [6]
t2 = lines [-6]
t3 = lines [-5]

PYCharm ругается следующим образом:

Traceback (most recent call last):
File "C:/Users/АБИ/PycharmProjects/pythonProject2/УрСО.py", line 10, in <module>
lines = f.readlines (1,10)  # читаем его построчно
TypeError: readlines expected at most 1 argument, got 2

Когда пользуюсь конструкцией:

name: str = input ("Введите имя входящего файла: ")
f = open (name, "r")  # открываем файл
lines1 = f.readlines()[:17]
lines2 = f.readlines ()  # читаем его построчно
t1 = lines2 [6]
t2 = lines2 [-6]
t3 = lines2 [-5]

выдаёт ошибку:

Traceback (most recent call last):
  File "C:/Users/АБИ/PycharmProjects/pythonProject2/УрСО.py", line 12, in <module>
    t1 = lines2 [6]
IndexError: list index out of range

Что я делаю не так?


Ответы (2 шт):

Автор решения: MaxU

Вариант 1:

N = 10
with open(filename) as f:
    lines = [next(f) for x in range(N)]

Вариант 2:

from itertools import islice

with open(...) as f:
    lines = list(islice(f, 0, N))

NOTE: оба варианта прочитают только N первых строк файла и остановятся на этом. Т.е. файл не будет читаться полностью в отличие от варианта с file.readlines()

→ Ссылка
Автор решения: passant

Если читать документацию, то там явно написано: The readlines() method returns a list containing each line in the file as a list item.

Что непонятно? Этот метод читает ВЕСЬ файл, и ваши первые 10 и ваши последние 10 и все остальные.

Хотите построчно - используйте метод readline().

Хотите прочитать ТОЛЬКО последние записи - используйте seek()

Хотите прочитать ВЕСЬ файл в обратном порядке

for line in reversed(list(open("filename"))):
    print(line.rstrip())
→ Ссылка