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)) の前後に「print file1」を配置すると、どちらも 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()、イテレーターから項目を 1 つずつ取得してジェネレーターをリストに変換し、その結果、ジェネレーターが使い果たされる (つまり終了する) のは です。

これを回避するには、ジェネレーターからリストを作成するだけです。

>>> myiter = (i for i in range(3))
>>> temp = list(myiter)
>>> len(temp)
3
>>> temp
[0, 1, 2]

イテレータとして再び必要になった場合は、いつでも呼び出すことができますiter()

于 2013-06-27T14:53:16.443 に答える