所以,我的总体目标是比较CSV文件,但后来遇到了这个问题。
以下是问题所在:
import csv
csv1 = "C:\\somefile.csv"
file1 = csv.reader(open(csv1))
print len(list(file1))
print file1.next()
无论出于何种原因,我都会遇到停止迭代错误。
len(list(file1))是否由于某些我不知道的原因而改变了file1? 如果我在len之前和之后放置一个“print file1”(list(file1)),它们都是csv reader对象,所以对我来说没有多大意义.next()不起作用。
答案 0 :(得分:0)
是的,这是len(list(file1))
。观察:
>>> myiter = (i for i in range(3))
>>> len(list(myiter))
3
>>> myiter.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
和
>>> myiter = (i for i in range(3))
>>> myiter.next()
0
>>> myiter.next()
1
>>> myiter.next()
2
>>> myiter.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
导致生成器到达终点的len()
不是list()
,而是>>> myiter = (i for i in range(3))
>>> temp = list(myiter)
>>> len(temp)
3
>>> temp
[0, 1, 2]
通过从迭代器中逐个取项来将生成器转换为列表,从而生成生成器筋疲力尽(即完成)。
要避免这种情况,只需从生成器中列出一个列表:
iter()
如果您再次需要它作为迭代器,您可以随时调用{{1}}