如何使用Python通过Timestamp检查3分钟内的字典数据活动
基于时间戳检查活动状态并触发告警
活动数据
[ {'Activity': 'password changed', 'Time': '08/17/2022 08:37:15', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:36:30', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:35:11', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:34:20', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:33:20', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '07/17/2022 10:37:15', 'UserName': 'client'} ]
需求
根据每条数据的Time字段判断活动状态:
- 若活动时间距离当前时间3分钟以内,判定为正常
- 若超过3分钟,输出告警信息
尝试的代码
from datetime import datetime, timedelta now = datetime.now()-timedelta(minutes=3) current_time = now.strftime('%m/%d/%Y %H:%M:%S') print(current_time) for o in op: temp = o['Time'] if current_time < temp: print("fine") else: print("alert")
问题分析
当前代码的核心问题是直接比较字符串格式的时间,字符串比较是按字符顺序逐位对比,并非真正的时间逻辑对比,会导致判断结果错误。正确做法是把字符串时间转换成datetime对象后再进行时间差的比较。
正确实现代码
from datetime import datetime, timedelta # 活动数据列表 op = [ {'Activity': 'password changed', 'Time': '08/17/2022 08:37:15', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:36:30', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:35:11', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:34:20', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '08/17/2022 08:33:20', 'UserName': 'client'}, {'Activity': 'password changed', 'Time': '07/17/2022 10:37:15', 'UserName': 'client'} ] # 获取当前时间往前推3分钟的时间点(datetime对象) three_minutes_ago = datetime.now() - timedelta(minutes=3) # 匹配数据中Time字段的格式 time_format = '%m/%d/%Y %H:%M:%S' for item in op: # 将字符串时间转换为datetime对象 activity_time = datetime.strptime(item['Time'], time_format) # 时间逻辑对比:活动时间晚于3分钟前的时间则正常,否则告警 if activity_time > three_minutes_ago: print(f"用户 {item['UserName']} 的活动【{item['Activity']}】状态正常") else: print(f"告警:用户 {item['UserName']} 的活动【{item['Activity']}】时间超过3分钟")
说明
- 使用
datetime.strptime()将字符串格式时间转为datetime对象,确保时间对比符合逻辑 - 直接用
datetime对象做大小比较,避免字符串对比的逻辑错误 - 输出信息增加用户和活动类型,提升可读性
内容的提问来源于stack exchange,提问作者warezers
相关产品推荐
相关产品推荐

