¿Cómo recorrer un rango específico de filas con Python csv reader?

¿Cómo recorrer un rango específico de filas con Python csv reader?

El siguiente código recorre todas las filas:

with open(trainFile, 'rt') as csvfile: spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') for row in spamreader: print (', '.join(row)) 

Deseo hacer un bucle solo de lo dado (i to j).

Puedes usar itertools.islice :

 import itertools i, j = 10, 20 with open(trainFile, 'rt') as csvfile: spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') for row in itertools.islice(spamreader, i, j+1): print (', '.join(row)) 

Alternativa (el siguiente código es posible porque csv.reader acepta un iterable):

NOTA : solo funciona cuando las filas CSV no contienen nueva línea.

 import itertools i, j = 10, 20 with open(trainFile, 'rt') as csvfile: spamreader = csv.reader(itertools.islice(csvfile, i, j+1), delimiter=' ', quotechar='|') for row in spamreader: print (', '.join(row)) 

Utilice islice , por ejemplo:

 rows_1_to_50 = itertools.islice(spamreader, 0, 50) for row in rows_1_to_50: pass 

Otra implementación de dropwhile usando dropwhile y takewhile

 from itertools import takewhile, dropwhile trainFile = 'x.1' low_lim = 3 high_lim = 6 with open(trainFile, 'rt') as csvfile: spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') g = (x for x in enumerate(spamreader, 1)) g = dropwhile(lambda x: x[0] < low_lim, g) g = takewhile(lambda x: x[0] <= high_lim, g) for row in g: print (', '.join(row[1]))