0

所以,我的总体目标是比较 CSV 文件,但后来我遇到了这个问题。

这就是问题所在:

import csv
csv1 = "C:\\somefile.csv"
file1 = csv.reader(open(csv1))

print len(list(file1))
print file1.next()

无论出于何种原因,我都会遇到停止迭代错误。

len(list(file1)) 是否出于某种我不知道的原因改变了 file1?如果我在 len(list(file1)) 之前和之后放置一个“打印文件 1”,它们都是 csv 读取器对象,所以 .next() 不起作用对我来说没有多大意义。

4

1 回答 1

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

于 2013-06-27T14:53:16.443 回答