在python csv阅读器循环中正确迭代和退出

时间:2013-04-22 00:09:27

标签: python csv

我正在努力解决两件事:

  1. 我在for row in reader下有很多事要做,我担心一切都正常执行。似乎有一些关于长指令块的迷信,所以我无意中引导它。

  2. 我不确定如何最好地进入下一个记录,或者即使我必须这样做。当我达到错误状态时,该行被写入丢弃文件,所以我真的可以等到循环的“结束”。但是,我需要做什么才能说“下一张唱片,好吗?”我是否必须在next()循环结束时明确for row...

  3. 在这里感谢一些指导。 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 writediscardwritegoodstufftothedatabase。我可以处理写入和提交写入sqlitedb。这种通过CSV迭代的麻烦是另一回事。

1 个答案:

答案 0 :(得分:1)

  1. 代码执行得很好。关于长指令块的“迷信”并不是因为某些东西不能执行而是难以阅读,理解,维护和修改。考虑将你的“foo”逻辑分解为已定义的函数并调用它们。

  2. 在您的情况下,下一个记录逻辑发生在迭代器中 for row in reader:。你不需要调用任何东西来获取下一条记录,你只需要确保你没有执行任何你不希望失败的代码,这与你的条件结构有关。您可以使用continue跳过循环中的代码并返回到顶部,但这不一定是您构建代码的方式。