0

私は2つのことで少し苦労しています:

  1. その下でやるべきことの巨大なブロックがあり、for row in readerすべてが適切に実行されるかどうか心配です。長い命令ブロックについては迷信があるようです。

  2. どうすれば次の記録に進むのが最善なのか、あるいはそうしなければならないのかさえわかりません。エラー状態に達すると、その行は破棄ファイルに書き込まれるので、ループの「終了」まで待つことができます。しかし、「次のレコードをお願いします」と言うにはどうすればよいでしょうか。ループnext()の最後で明示的にする必要がありますか?for row...

ここでいくつかのガイダンスに感謝します。TC

with open('data.csv',rb) as f:
    reader = csv.reader(f)
    next(reader, None) # skip the header
    for row in reader:
        foo
        foo
        lots more foo
        if bar1 == errorvalue1:
            writediscard (row)
        else:
            if bar2 == errorvalue2:
                writediscard (row)
            else:
                writegoodstufftothedatabase(data)
   # in all cases, want to advance to the next record

私は以上であることに注意してdef writediscardくださいwritegoodstufftothedatabase。sqlitedb への書き込みとコミットを処理できます。この CSV を繰り返し処理することは別の話です。

4

1 に答える 1

1
  1. コードは問題なく実行されるはずです。長い命令ブロックに関する「迷信」は、何かが実行されないという懸念からではなく、読み取り、理解、保守、および変更が困難であるという懸念から生じています。「foo」ロジックを定義済みの関数に分割し、それらを呼び出すことを検討してください。

  2. あなたの場合、次のレコード ロジックは iterator で発生します for row in reader:。次のレコードを取得するために何かを呼び出す必要はありません。条件付き構造で行う、失敗時に実行したくないコードを実行しないことを確認するだけで済みます。を使用continueしてループ内のコードをスキップし、先頭に戻ることもできますが、コードを構造化する方法では必要ありません。

于 2013-04-22T00:22:21.810 に答える