ジェネレーターを連鎖させようとしているので、バッチで単一の操作を行うのではなく、大きな CSV ファイルを行のストリームとして処理できます。
このようにして、データセット全体をメモリにロードすることを避けて、各ステップの各反復を遅らせることができます。
ジェネレーター式は、if ステートメントを使用して出力をフィルター処理しようとする場合を除いて、正常に機能します。
これは機能します: 一度に 1 つの反復のみが消費されます
file_iterable = open("myfile.csv")
parsed_csv_iterable = (parse_i(i) for i in file_iterable)
next()
次に、結果の iterableを呼び出すことで、一度に 1 行ずつ取得できます。ただし、これを行うと
file_iterable = open("myfile.csv")
parsed_csv_iterable = (parse_i(i) for i in file_iterable if parse_i(i)[0] in [1,2,3])
その後、イテレータは が使い果たされるまで実行を続けます。なんで?回避策は何ですか?