Leer un archivo 8 líneas a la vez Python

Hola, estoy intentando leer un archivo en Python 8 líneas a la vez y usar las 8 líneas actuales como variables str

Sin embargo, no puedo hacer esto correctamente y agradecería cualquier ayuda.

with open("test.txt", 'r') as infile: lines_gen = islice(infile, 8) for lines in lines_gen: firstname = str(lines[0]) lastname = str(lines[1]) email = str(lines[2]) 

Cómo puedo conseguir esto

*aclamaciones

Y ty por cualquier ayuda.

Una implementación simple usando itertools.islice

 from itertools import islice with open("test.txt") as fin: try: while True: data = islice(fin, 0, 8) firstname = next(data) lastname = next(data) email = next(data) #..... except StopIteration: pass 

Una mejor implementación más pythonica.

 >>> from collections import namedtuple >>> from itertools import islice >>> records = namedtuple('record', ('firstname','lastname','email' #, ..... )) >>> with open("test.txt") as fin: try: while True: data = islice(fin, 0, 3) data = record(*data) print data.firstname, data.lastname, data.email #....... except (StopIteration, TypeError): pass 

Usando las n cosas habituales en un patrón de tiempo.

 from itertools import izip with open("test.txt") as f: line_gen = izip(*[f]*8) for lines in line_gen: print lines firstname, lastname, email, fourth, fifth, sixth, seventh, eighth = lines ... 

Qué tal esto :-

 with open("test.txt", 'r') as infile: lines_gen = infile.readlines() for i in range(0, len(lines_gen), 8): (firstname, lastname, email, etc1, ..) = lines_gen[i:i+8] 

no probado

Prueba esto:

 every_eight = [] lines = open('test.txt').readlines() j = 0 for n in range(0, len(lines) +1, 8): every_eight.append(''.join([lines[l] for l in range(j, n)])) j = n 

Por cierto, si está tratando de aceptar aportes masivos para toneladas de personas o algo, podría intentar usar diccionarios de dictamen en una lista como esta:

 info = [] every_eight = [] lines = open('test.txt').readlines() j = 0 for n in range(0, len(lines) +1, 8): every_eight.append([lines[l] for l in range(j, n)]) j = n for setinf in every_eight: if len(setinf) == 8: info.append({ 'firstname': setinf[0], 'lastname' : setinf[1], 'email' : setinf[2], }) for inf in info: print inf 
 with open("test.txt", 'r') as infile: it = iter(infile) while True: lines_list = [] try: for i in range(8): lines_list.append(next(it)) except StopIteration: if len(lines_list) == 0: break for eight_lines in lines_list: # Do something with eight_lines[0:8]