2013-06-27 68 views
0

因此,我的總體目標是比較CSV文件,但後來我遇到了這個問題。CSV閱讀器和CSV,len(列表())的長度不讓我使用.next()後

這裏的地方的問題是:

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))之前和之後放置一個「print file1」,它們都是csv閱讀器對象,所以對我來說,.next()將不起作用。

回答

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

+0

那麼,什麼是最好的方式如果我不能使用len(list())? – Ben

+0

@Ben增加了信息 – TerryA