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

前端 未结 3 1693
花落未央
花落未央 2021-01-18 00:15

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 csvfi         


        
相关标签:
3条回答
  • 2021-01-18 00:34

    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))
    
    0 讨论(0)
  • 2021-01-18 00:38

    Use islice, eg:

    rows_1_to_50 = itertools.islice(spamreader, 0, 50)
    for row in rows_1_to_50:
        pass
    
    0 讨论(0)
  • 2021-01-18 00:50

    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]))
    
    0 讨论(0)
提交回复
热议问题