我正在努力解决两件事:
我在for row in reader
下有很多事要做,我担心一切都正常执行。似乎有一些关于长指令块的迷信,所以我无意中引导它。
我不确定如何最好地进入下一个记录,或者即使我必须这样做。当我达到错误状态时,该行被写入丢弃文件,所以我真的可以等到循环的“结束”。但是,我需要做什么才能说“下一张唱片,好吗?”我是否必须在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迭代的麻烦是另一回事。
答案 0 :(得分:1)
代码执行得很好。关于长指令块的“迷信”并不是因为某些东西不能执行而是难以阅读,理解,维护和修改。考虑将你的“foo”逻辑分解为已定义的函数并调用它们。
在您的情况下,下一个记录逻辑发生在迭代器中
for row in reader:
。你不需要调用任何东西来获取下一条记录,你只需要确保你没有执行任何你不希望失败的代码,这与你的条件结构有关。您可以使用continue
跳过循环中的代码并返回到顶部,但这不一定是您构建代码的方式。