Посмотрите на grouper
в itertools
рецептах в документах:
from itertools import zip_longest
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
Теперь вы можете перебирать каждую группу из 8 строк:
with open(path) as f:
for group in grouper(f, 8):
Если вы хотите объединить каждую группу в одну строку, которую вы можете записать в новый файл:
with open(path) as f:
for i, group in enumerate(grouper(f, 8)):
with open(f'out_{i}.txt', 'w') as outf:
outf.write(''.join(group))
Если вы хотите превратить все внутренние символы новой строки в пробелы:
with open(path) as f:
for i, group in enumerate(grouper(f, 8)):
with open(f'out_{i}.txt', 'w') as outf:
outf.write(''.join(group).replace('\n', ' ') + '\n')
Хорошая особенность работы в стиле генератора заключается в том, что вы можете изменить правило группировки без изменения остальной части кода. Например, если вы хотите разбить каждую строку, соответствующую формату даты, как в ответ Мигеля Ортиса :
from itertools import groupby
rdate = re.compile(r'(\d+/\d+/\d+)')
with open(path) as f:
for i, (k, group) in enumerate(groupby(f, rdate.search)):
with open(f'out_{i}.txt', 'w') as outf:
outf.write(''.join(group).replace('\n', ' ') + '\n')