Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to loop through specific range of rows with Python csv reader?

Tags:

python

csv

How to loop through a specific range of rows with Python csv reader?

The following code loops through all rows:

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

I wish to loop only from given (i to j).

like image 476
Timothée HENRY Avatar asked Sep 26 '13 14:09

Timothée HENRY


3 Answers

You can use 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))

Alternative (following code is possible because csv.reader accept an iterable):

NOTE: only works when CSV rows do not contain newline.

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))
like image 128
falsetru Avatar answered Oct 14 '22 21:10

falsetru


Use islice, eg:

rows_1_to_50 = itertools.islice(spamreader, 0, 50)
for row in rows_1_to_50:
    pass
like image 42
Jon Clements Avatar answered Oct 14 '22 23:10

Jon Clements


Another itertools implementation using dropwhile and 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]))
like image 42
iruvar Avatar answered Oct 14 '22 22:10

iruvar