CSV阅读器和CSV,len(list())的长度不允许我以后使用.next()

时间:2013-06-27 14:50:22

标签: python list csv

所以,我的总体目标是比较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()不起作用。

1 个答案:

答案 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}}