我想从csv文件中读取最多20行:
rows = [csvreader.next() for i in range(20)]
如果文件有20行或更多行,则工作正常,否则会失败并出现StopIteration异常。
是否有一种优雅的方法来处理可能在列表解析中抛出StopIteration异常的迭代器,还是应该使用常规for循环?
答案 0 :(得分:12)
您可以使用itertools.islice
。它是列表切片的迭代器版本。如果迭代器的元素少于20个,它将返回所有元素。
import itertools
rows = list(itertools.islice(csvreader, 20))
答案 1 :(得分:0)
itertools.izip
(2)提供了一种轻松使列表推导工作的方法,但islice
看起来是这种情况的方法。
from itertools import izip
[row for (row,i) in izip(csvreader, range(20))]
答案 2 :(得分:-1)
如果出于某种原因你还需要跟踪行号,我建议你:
rows = zip(xrange(20), csvreader)
如果没有,你可以在之后将它剥离出来......或者,你最好从一开始就尝试其他选择: - )