Как считать только первые 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 шт):
Вариант 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()
Если читать документацию, то там явно написано: 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())