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

Python如何筛选日志中含begin/end的行并保存到文件

日志关键词行提取并保存到文件

需求说明

从日志文件中提取所有包含关键词begin和end的行,将筛选结果保存为新文件。

原始日志样例

19-3-2020 05:23:20.481  INFO    12  183 creating socket for traffic CONTROL module
19-3-2020 05:23:20.481  INFO    18  189 transaction 17336 begin
19-3-2020 05:23:20.622  INFO    17  194 creating mailslot for RSVP
19-3-2020 05:23:20.622  INFO    16  187 end transaction 17336
19-3-2020 05:23:20.622  INFO    13  193 transaction 17339 begin

期望输出结果

19-3-2020 05:23:20.481  INFO    18  189 transaction 17336 begin
19-3-2020 05:23:20.622  INFO    16  187 end transaction 17336
19-3-2020 05:23:20.622  INFO    13  193 transaction 17339 begin
19-3-2020 05:23:20.792  INFO    15  194 end transaction 17339

当前已有代码

现有代码已经可以在控制台正确打印筛选出的行,代码如下:

with open("exam.log", "r") as f:
    text = f.readlines()
END = 'end'
BEGIN = 'begin'
for val in text:
    if END in val:
        print(val)
    if BEGIN in val:
        print(val)

实现方案

只需要在原有逻辑基础上增加文件写入操作即可,推荐使用逐行读取逐行写入的写法,内存占用更低,适配GB级大日志文件处理:

END = 'end'
BEGIN = 'begin'

# 同时打开源日志文件和结果输出文件
with open("exam.log", "r", encoding="utf-8") as src_file, open("filtered_result.log", "w", encoding="utf-8") as res_file:
    for line in src_file:
        # 匹配到任意一个关键词就同时输出到控制台和结果文件
        if BEGIN in line or END in line:
            print(line.strip())
            res_file.write(line)

如果是处理体积较小的日志,也可以先收集所有匹配行再一次性写入:

END = 'end'
BEGIN = 'begin'
matched_lines = []

with open("exam.log", "r", encoding="utf-8") as f:
    for line in f:
        if BEGIN in line or END in line:
            matched_lines.append(line)
            print(line.strip())

# 批量写入结果文件
with open("filtered_result.log", "w", encoding="utf-8") as f:
    f.writelines(matched_lines)

注意事项

  • 打开文件时建议显式指定encoding="utf-8",避免Windows、Linux等不同系统默认编码差异导致的乱码问题
  • 原代码使用两个独立if判断,如果某一行同时包含begin和end会被重复打印、重复写入,改用or合并判断条件可以避免这个问题
  • 不需要提前调用readlines()把整个文件加载到内存,直接遍历文件对象即可逐行读取,处理大文件时内存占用稳定

内容的提问来源于stack exchange,提问作者nati malm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:39:58