Python字符串在循环中未正确清除



我正在编写一个脚本,其中我需要浏览csv文件并查找。我正在查找特定用户第一次登录和最后一次注销的时间。我设置了运行良好的循环,但当我用登录/注销的时间字符串清除列表时,我会得到一个索引超出范围的错误。有人能发现这个有什么不正确的地方吗?

#this gets the earliest login time for each agent (but it assumes all dates to be the same!)
with open(inputFile, 'r') as dailyAgentLog:
csv_read = csv.DictReader(dailyAgentLog)
firstLoginTime = []
lastLogoutTime = []
outputLine = []
while x < len(agentName):
for row in csv_read:
if row["Agent"] == agentName[x]:
firstLoginTime.append(datetime.strptime(row["Login Time"], '%I:%M:%S %p'))
lastLogoutTime.append(datetime.strptime(row["Logout Time"], '%I:%M:%S %p'))
firstLoginTime.sort()
lastLogoutTime.sort()
outputLine = [agentName[x], agentLogin[x], agentExtension[x], row["Login Date"], firstLoginTime[0], row["Logout Date"], lastLogoutTime[-1]]
print(f'Agent {agentName[x]} first login was {firstLoginTime[0]} and last logout {lastLogoutTime[-1]}.')
fileLines.append(outputLine)
x += 1
firstLoginTime.clear() #this should be emptying/clearing the list at the end of every iteration
lastLogoutTime.clear()

问题是,在第二次和接下来的迭代中,for row in csv_read:循环不会执行,因为没有什么可读的了。因此,在随后的迭代中,您永远不会填写firstLoginTimelastLoginTime列表,并且对它们进行索引会失败。

如果文件不是太大,可以在迭代之前将其读取到列表中:

csv_read = list(csv.DictReader(dailyAgentLog))

如果它太大而无法保存在内存中,请放入

dailyAgentLog.seek(0)

在环体的末端。

此外,您可以使用min()max():来代替对列表进行排序

firstLogin = min(firstLoginTime)
lastLogin = max(lastLoginTime)

我建议你使用

for x in range(len(agentName)):

而不是CCD_ 6和递增。

相关内容

  • 没有找到相关文章

最新更新