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

Python日志解析:提取消息大小并计算均值与标准差

解决方案

你的important列表已经按顺序存储了每一组日志的消息行和字节行(每两个元素为一组:消息行在前,字节行在后)。我们可以用字典来关联每个消息类型对应的所有字节大小,之后用Python内置的statistics模块计算均值和标准差。

步骤说明:

  • 初始化字典message_sizes,键为消息类型(如GENERIC_INFO),值为对应字节大小的列表。
  • 按步长2遍历important列表,每次取一组消息行和字节行。
  • 从消息行提取消息类型(索引8),从字节行提取字节数(索引6,转成整数)。
  • 将字节数添加到对应消息类型的列表中。
  • 最后遍历字典,计算每个消息类型的均值和标准差。

修改后的完整代码:

import statistics

logfile = r"C:\Users\vangjeris.dhroso\Documents\Python_Sandbox\Message_log.txt"

important = []
keep_phrases = ["Writer", "bytes"]

with open(logfile) as f:
    lines = f.readlines()

for line in lines:
    for phrase in keep_phrases:
        if phrase in line:
            important.append(line.split())
            break

# 关联消息类型和字节大小
message_sizes = {}
# 每两个元素为一组:消息行 + 字节行
for i in range(0, len(important), 2):
    # 提取消息类型(第8位索引)
    msg_type = important[i][8]
    # 提取字节大小并转成整数(第6位索引)
    byte_size = int(important[i+1][6])
    
    # 存入字典
    if msg_type not in message_sizes:
        message_sizes[msg_type] = []
    message_sizes[msg_type].append(byte_size)

# 计算每个消息类型的均值和标准差
for msg_type, sizes in message_sizes.items():
    mean_size = statistics.mean(sizes)
    # 样本标准差(用stdev),总体标准差用statistics.pstdev()
    std_dev = statistics.stdev(sizes)
    print(f"消息类型: {msg_type}")
    print(f"均值: {mean_size:.2f} bytes")
    print(f"标准差: {std_dev:.2f} bytes\n")

注意事项:

  • 确保日志格式完全符合预期:每一组的消息行(含Writer)后面紧跟字节行(含bytes),否则会出现索引错误。
  • 如果日志中有空行或格式异常的行,建议添加try-except异常处理避免程序崩溃。
  • statistics.stdev()计算的是样本标准差,若需计算总体标准差(所有数据为全部样本),改用statistics.pstdev()。

内容的提问来源于stack exchange,提问作者Eris Dhroso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:35:22