Если файлы не до смешного огромны и память не представляет проблемы, вы можете альтернативно просто прочитать весь документ, а затем использовать for
для проверки только каждой 4-й строки, начинающейся свторая строка (помните, что индексирование начинается с 0, поэтому мы проверяем строки № 1, затем № 5, № 9 и т. д.), не беспокоясь о enumerate
, вложенных if
, next
или модульной арифметике.
Чтобы убедиться, что у вас есть полный блок из 4 строк для просмотра каждый раз, вы можете перебирать последнюю строку каждого полного блока из 4 (строки № 3, № 7, № 11 и т. Д.), затем проверьте только строку, которая идет 2 перед этим.Когда вы найдете совпадение, напишите все 4 строки.
with open(filename, 'r') as f:
lines = f.readlines()
with open(outputfile, "w") as g:
for line_num in range(3, len(lines), 4):
if len(lines[line_num - 2]) > 2000:
g.write(lines[line_num - 3])
g.write(lines[line_num - 2])
g.write(lines[line_num - 1])
g.write(lines[line_num])
Синтаксис range()
- range(from, to, skip)
.Более конкретно, команда range(3, len(lines), 4)
возвращает список всех целых чисел, начинающихся с 3
, затем вплоть до числа, равного общему количеству строк в документе, но занимающего только каждое четвертое целое число.Так что это список [3, 7, 11, 15, 19, ... ]
и так далее, пока у вас не закончатся номера строк.