我在以下代码中遇到逻辑错误:
while count < 5:
row = next(csv_f)
if row[0] != currentID:
userArray.append(Users(row[0]))
currentID = row[0]
count = count+1
userArray[len(userArray)-1].addUsageData(row[1],row[3])
它循环遍历每个用户,直到ID发生变化,总共执行五次。
一切正常,但是我从行[1]获得的使用数组中的最后一个索引始终是下一个userID块中的第一个索引。它就像执行if块时len(userArray)没有更新一样。
答案 0 :(得分:0)
最后一次row[0] != currentID
时,count
增加到5.这
在任何后续行之前,您会立即突破while-loop
,
在csv_f
处理。如果addUsageData
正在累积数据,则这就是最终user
只有一行数据的原因。
您可以使用itertools.groupby
和itertools.islice
修补此问题:
import itertools as IT
import operator
userArray = []
for currentID, grp in IT.islice(IT.groupby(csv_f, key=operator.itemgetter(0)), 5):
user = Users(currentID)
userArray.append(user)
for row in grp:
user.addUsageData(row[1], row[3])