Python 2.6如何基于文件名时间戳筛选指定时间范围的日志文件
用Python 2.6筛选指定时间范围的日志文件(基于文件名时间戳)
嘿,我来帮你搞定这个日志文件筛选的逻辑问题!首先得明确每个日志文件的时间覆盖范围:每个文件的日志条目是从它的创建时间(取自文件名的时间戳)开始,到下一个日志文件的创建时间之前结束——毕竟日志文件达到200MB就会新建,下一个文件创建时,当前文件就停止写入了。最后一个文件的话,我们可以默认它的结束时间是“无限远”,不过在你的场景里不需要考虑这个,因为目标事件的结束时间早于最后一个文件的创建时间。
判断一个文件是否包含目标事件的核心逻辑就是:目标事件的时间区间和当前文件的时间区间存在重叠。具体来说,只要满足两个条件就能判定重叠:
- 事件的开始时间早于当前文件的结束时间(也就是下一个文件的创建时间)
- 事件的结束时间晚于或等于当前文件的开始时间
下面是补全后的完整代码,完全基于Python 2.6标准库实现:
import datetime # 目标事件的时间范围 call_start = datetime.datetime(2018, 5, 15, 5, 25, 9) call_stop = datetime.datetime(2018, 5, 15, 5, 37, 38) # 从文件名解析出的各日志文件创建时间 t1 = datetime.datetime(2018, 5, 15, 4, 48, 16) t2 = datetime.datetime(2018, 5, 15, 5, 3, 53) t3 = datetime.datetime(2018, 5, 15, 5, 19, 14) t4 = datetime.datetime(2018, 5, 15, 5, 35) t5 = datetime.datetime(2018, 5, 15, 5, 49, 19) file_times = [t1, t2, t3, t4, t5] # 先确保时间列表按升序排列(实际场景中文件名可能需要排序后解析时间,这里做一层保障) file_times_sorted = sorted(file_times) matching_times = [] for idx, ftime in enumerate(file_times_sorted): # 获取当前文件的结束时间:下一个文件的创建时间,最后一个文件用极大值代替 if idx < len(file_times_sorted) - 1: next_ftime = file_times_sorted[idx + 1] else: next_ftime = datetime.datetime.max # 判断事件区间与当前文件的时间区间[ftime, next_ftime)是否重叠 if call_start < next_ftime and call_stop >= ftime: matching_times.append(ftime) # 输出结果,预期包含t3和t4 print("匹配的日志文件创建时间:", matching_times)
咱们来逐文件验证逻辑:
- t3(5:19:14):下一个文件创建时间是t4的5:35:00。事件开始时间(5:25:9)早于5:35:00,且事件结束时间(5:37:38)晚于5:19:14 → 满足条件,加入结果列表。
- t4(5:35:00):下一个文件创建时间是t5的5:49:19。事件开始时间(5:25:9)早于5:49:19,且事件结束时间(5:37:38)晚于5:35:00 → 满足条件,加入结果列表。
- t1、t2:它们的下一个文件创建时间都早于事件开始时间,没有重叠,不加入。
- t5:创建时间晚于事件结束时间,没有重叠,不加入。
运行代码后,matching_times就会包含t3和t4,完全符合你的预期!
内容的提问来源于stack exchange,提问作者Jeff A
相关产品推荐
相关产品推荐

