ファイルの行数を数えようとしていますが、奇妙な結果が出ています。 MWEがあります下に、私はそれが自分自身のために話すと信じて:ファイル内の行数がファイルを消去します
file=open('Example.txt','r')
print(sum(1 for line in file))
print(len(file.readlines()))
私はこれを実行すると、私は出力X
(右行数)と0
を取得します。したがって、2番目の方法は機能していないか、空の変数を読み込むことです。私が注文を切り替えると、私は同じ結果になるので、何とか変数が消えてしまった。 file_1
とfile_2
を同じファイルに割り当てて、それぞれのメソッドを異なる変数で実行すると、XとXが得られます。そのため、アクションが完了した後で変数が消去されます。
"r"
から"r+"
に変更しようとしましたが、運がありません。誰かがここで何が起こっているのか説明できますか?リストを操作してもリストを変更すべきではありません。少なくともこれは私が教えたことです。
ありがとうございました!何が起こる
ありがとう、私はそのようなことが起こる可能性は考えていませんでした。このイテレータはどこに明示的に宣言されていますか?どのようにしてこの問題の対象になるのか分かりますか? CとMATLABでの私の経験では、イテレータをリセットする必要がありますが、Pythonでは内部的なプロセスだと本当に信じていました。 'r'は元のコードから残ったもので、私は 'r +'を使用しますが、メモに感謝します! – Alegom
これは組み込みで、 'C 'で実装されています([' fileobject.c'](https://github.com/python/cpython/blob/master/Objects/fileobject.c)にあります) 。 'iter(obj)is obj'をチェックすることで、イテレータが一度反復処理された後、イテレータが使い尽くされていることが分かります。これが当てはまる場合、 'obj .__ iter__'はその実装で' self'を返し、動作を目撃します。そうでない場合、 '__iter__'メソッドは、複数回繰り返すことができる光沢のある新しいイテレータオブジェクトを返します。@Alegom –
このイベントをいつ見なければならないのですか?この場合、私のファイルは15行でした。イテレータがすぐに疲れてしまうのを誰が知っていたのですか? – Alegom