用COUNTIF统计5万行日志中1ms内出现3次记录的次数
统计1ms内产生3条日志的次数
核心思路
将日志时间转换为可计算的毫秒级数值,通过滑动窗口检查连续3条日志的时间范围是否在1ms内,统计符合条件的组数。
具体步骤
时间格式转换
把日志中的HH:MM:SS.sss AM/PM格式转换为当天的毫秒级时间戳,方便计算时间差。示例Python代码:from datetime import datetime def convert_to_ms(time_str): # 解析带AM/PM的时间字符串 dt = datetime.strptime(time_str.strip(), "%I:%M:%S.%f %p") # 计算从当天0点开始的总毫秒数 total_ms = dt.hour * 3600 * 1000 + dt.minute * 60 * 1000 + dt.second * 1000 + dt.microsecond // 1000 return total_ms滑动窗口统计
遍历转换后的毫秒数组,从第3个元素开始,检查当前元素与前两个元素的时间差是否≤1ms(只要最晚和最早的时间差不超过1ms,就说明3条都在1ms窗口内)。示例代码:def count_target_groups(ms_list): count = 0 if len(ms_list) < 3: return 0 # 遍历所有连续3条的组合 for i in range(2, len(ms_list)): if ms_list[i] - ms_list[i-2] <= 1: count += 1 return count处理5万行日志
读取日志文件,清洗掉空行后批量转换为毫秒数组,再调用统计函数得到结果:# 读取日志(假设日志文件名为log.txt) with open("log.txt", "r") as f: lines = [line for line in f if line.strip()] # 转换为毫秒数组 ms_array = [convert_to_ms(line) for line in lines] # 统计次数 result = count_target_groups(ms_array) print(f"1ms内出现3条日志的次数:{result}")
注意事项
- 若日志存在跨天情况,需在时间字符串中补充日期信息,避免时间计算错误
- 连续多条日志在1ms内时,会按连续3条的组合分别计数(比如4条连续符合条件会计2次)
内容的提问来源于stack exchange,提问作者mjac
相关产品推荐
相关产品推荐

