如何使用Python csv阅读器循环特定范围的行?

如何使用Python csv阅读器循环特定范围的行?,python,csv,Python,Csv,如何使用PythonCSV阅读器循环特定范围的行 以下代码在所有行中循环: with open(trainFile, 'rt') as csvfile: spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') for row in spamreader: print (', '.join(row)) 我只希望从给定的(I到j)循环。使用islice,例如: rows_1_to_50 = ite

如何使用PythonCSV阅读器循环特定范围的行

以下代码在所有行中循环:

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

我只希望从给定的(I到j)循环。

使用
islice
,例如:

rows_1_to_50 = itertools.islice(spamreader, 0, 50)
for row in rows_1_to_50:
    pass
您可以使用:

备选方案(以下代码是可能的,因为csv.reader接受iterable):

注意:仅当CSV行不包含换行符时有效

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))

使用
dropwhile
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]))
从itertools导入takewhile、dropwhile
trainFile='x.1'
低限=3
高限=6
打开(列车文件“rt”)作为csvfile:
spamreader=csv.reader(csvfile,分隔符='',引号='|')
g=(枚举中的x代表x(spamreader,1))
g=下降时间(λx:x[0]<下限,g)

g=takewhile(λx:x[0]@kworr,谢谢你的评论。我提到了这一点。在你的备选方案中,
I
j
的值没有被引用…所以我怀疑它是否能如图所示工作。@martineau,谢谢你指出。我相应地更新了备选方案。当你说
trainFile='x.1'
时,它指的是完整的路径,对吗?@MattO'Brien,那就是正确。可以是完整的或相对的
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]))