2016-06-23 9 views
0

私はこの機能をPythonのCSVリーダーで見るとかなり驚きました。Python CSV Reader Control Flow

with open(sys.argv[1]) as csvfile: 
    reader = csv.DictReader(csvfile) 
    for i in range(3): 
     sys.stdout.write('A ') 
     for row in reader: 
      sys.stdout.write('B ') 

#sys.argv[1] is a 3 row csv file 

私は、通常、このようなコードのようなものプリントアウトすることを期待します:

A B B B A B B B A B B 

しかし、代わりに私が手:

A B B A A 

これがための基本的なフロー制御の特性に違反しているようだが私はそれらを理解してループします。私は主に、このイテレータの珍しい性質があることを主張しています。どんな説明も参考になり非常に感謝しています。ありがとうございました。

答えて

2

readerオブジェクトcsv.DictReaderはジェネレータです。それは外側の最初の反復で疲れましたfor。したがって、次の反復では、内部ループforにはループを実行する項目がありません。

+0

大丈夫です。私はループの2つの場所を切り替えることでそれを修正できると思います。ありがとうございました。 –

+0

@LucaDelSignoreはい、できます。しかし、csvファイルが大きすぎない場合は、リーダーからのアイテムを 'list'に格納することもできます –

+0

実際には、実際のCSVファイルは非常に大きいです。 –

関連する問題