Это можно сделать с умным использованием функции zip.Это коротко, но немного вуду, на мой вкус (трудно понять, как это работает).Он обрезает все строки в конце, которые не заполняют группу, что может быть хорошим или плохим в зависимости от того, что вы делаете.Если вам нужны последние строки, itertools.izip_longest
может помочь.
zip(*[iter(inputfile)] * 3)
Делая это более явно и гибко, это модификация решения Матса Экберга:
def groupsoflines(f, n):
while True:
group = []
for i in range(n):
try:
group.append(next(f))
except StopIteration:
if group:
tofill = n - len(group)
yield group + [None] * tofill
return
yield group
for line1, line2, line3 in groupsoflines(inputfile, 3):
...
NBЕсли в середине группы не хватает строк, они заполнят пробелы None
, так что вы все равно сможете распаковать их.Таким образом, если число строк в вашем файле не кратно трем, вам нужно проверить, являются ли line2
и line3
None
.