0

我在两件事上有点挣扎:

  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 writediscardwritegoodstufftothedatabase以上。我可以处理写入和提交写入到 sqlitedb。对 CSV 进行迭代是另一回事。

4

1 回答 1

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

  2. 在您的情况下,下一个记录逻辑发生在 iterator 中 for row in reader:。您不需要调用任何东西来获取下一条记录,您只需要确保在失败时不执行任何您不想执行的代码,您可以使用条件结构执行此操作。您可以使用continue跳过循环中的代码并返回顶部,但这不是您构建代码的必要方式。

于 2013-04-22T00:22:21.810 回答