You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.6如何基于文件名时间戳筛选指定时间范围的日志文件

用Python 2.6筛选指定时间范围的日志文件(基于文件名时间戳)

嘿,我来帮你搞定这个日志文件筛选的逻辑问题!首先得明确每个日志文件的时间覆盖范围:每个文件的日志条目是从它的创建时间(取自文件名的时间戳)开始,到下一个日志文件的创建时间之前结束——毕竟日志文件达到200MB就会新建,下一个文件创建时,当前文件就停止写入了。最后一个文件的话,我们可以默认它的结束时间是“无限远”,不过在你的场景里不需要考虑这个,因为目标事件的结束时间早于最后一个文件的创建时间。

判断一个文件是否包含目标事件的核心逻辑就是:目标事件的时间区间和当前文件的时间区间存在重叠。具体来说,只要满足两个条件就能判定重叠:

  1. 事件的开始时间早于当前文件的结束时间(也就是下一个文件的创建时间)
  2. 事件的结束时间晚于或等于当前文件的开始时间

下面是补全后的完整代码,完全基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:22:12