我是编程的新手,这是我第一次尝试写的真正的程序。
所以我有这个巨大的CSV文件(数百个cols和数千行),我试图根据字段中的值提取少量列。它工作正常,我得到了很好的输出,但当我尝试在函数中封装相同的逻辑时出现问题。 它只返回第一个提取的行,但打印工作正常。
我已经玩了好几个小时,并在这里阅读其他例子,现在我的脑海里浮现。
import csv
import sys
newlogfile = csv.reader(open(sys.argv[1], 'rb'))
outLog = csv.writer(open('extracted.csv', 'w'))
def rowExtractor(logfile):
for row in logfile:
if row[32] == 'No':
a = []
a.append(row[44])
a.append(row[58])
a.append(row[83])
a.append(row[32])
return a
outLog.writerow(rowExtractor(newlogfile))
答案 0 :(得分:1)
你过早退出。当您将return a
置于for
循环内时,将在第一次迭代时调用return。这意味着只有第一次迭代运行。
这样做的一个简单方法是:
def rowExtractor(logfile):
#output holds all of the rows
ouput = []
for row in logfile:
if row[32] == 'No':
a = []
a.append(row[44])
a.append(row[58])
a.append(row[83])
a.append(row[32])
output.append(a)
#notice that the return statement is outside of the for-loop
return output
outLog.writerows(rowExtractor(newlogfile))
您还可以考虑使用yield
答案 1 :(得分:1)
你的函数中有一个return语句......当它到达那一行时,它将返回(从而终止你的循环)。您需要yield
代替。