Вы предполагаете, что у вас всегда есть 7 или более строк в каждом блоке. Возможно, ваш файл заканчивается на \n\n
, или у вас есть поврежденные блоки.
Просто проверьте длину и пропустите блок:
for news_item in news:
lines = news_item.split("\n")
if len(lines) < 7:
continue
Обратите внимание, что вы на самом деле этого не делаетеЗдесь нужно прочитать весь файл в память, вы также можете перебрать объект файла и прочитать дополнительные строки из объекта файла. Лично я бы создал отдельный объект-генератор, который выбирает определенные строки из файла:
def block_line_at_n(fobj, n):
while True:
for i, line in enumerate(fobj):
if line == "\n":
# end of block, start a new block
break
if i == n:
yield line
else:
# end of the file, exit
return
with open('news', 'r') as f:
for line in block_line_at_n(f, 6):