pythonscsv读取器循环中的正确迭代和退出

2024-05-23 16:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两件事要做:

  1. for row in reader下,我有一大堆事情要做,我担心所有的事情都能正确执行。似乎有一些关于长指令块的迷信,所以我正在不知不觉地引导它。

  2. 我不知道怎样才能最好地晋级下一张唱片,甚至我必须这样做。当我达到一个错误条件时,该行被写入到一个丢弃文件中,所以我真的可以等到循环的“结束”。但我要怎么说“下一张唱片?”我是否必须在for row...循环的末尾显式地生成next()

感谢您的指导。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迭代是另一个故事。在


Tags: csvtheinfordataiffoo事情
1条回答
网友
1楼 · 发布于 2024-05-23 16:33:37
  1. 代码应该执行得很好。对长指令块的“迷信”并不是因为担心某些东西无法执行,而是因为它很难阅读、理解、维护和修改。考虑将您的“foo”逻辑分解为定义的函数并调用它们。

  2. 在您的例子中,下一个记录逻辑发生在迭代器中 for row in reader:。你不需要调用任何东西来获取下一条记录,你只需要确保在失败时不执行任何你不想执行的代码,这是对你的条件结构所做的。您可以使用^{}跳过循环中的代码并返回到顶部,但这并不是构建代码的方式所必需的。

相关问题 更多 >