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

如何用Python过滤日志文件中的数据包数量并求和?

提取日志中数据包数量并求和的Python实现

原始日志片段

Jun 23 10:10:03 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 145.89.182.65 -> 145.89.109.49 (0/0), 6 packets
Jun 23 10:18:40 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 95.9.149.232 -> 145.89.109.49 (0/0), 1 packet
Jun 23 10:57:05 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 169.244.237.130 -> 145.89.109.49 (0/0), 3 packets

方法一:正则表达式匹配(精准高效)

利用正则直接匹配日志中数据包数量的数字,适合复杂格式的日志场景:

import re

# 日志内容,实际使用时也可从文件读取
log_content = """Jun 23 10:10:03 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 145.89.182.65 -> 145.89.109.49 (0/0), 6 packets 
Jun 23 10:18:40 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 95.9.149.232 -> 145.89.109.49 (0/0), 1 packet 
Jun 23 10:57:05 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 169.244.237.130 -> 145.89.109.49 (0/0), 3 packets"""

# 匹配逗号后、packet(s)前的数字
packet_numbers = re.findall(r', (\d+) packets?', log_content)
# 转换为整数并求和
total_packets = sum(int(num) for num in packet_numbers)

print(f"总数据包数量:{total_packets}")

方法二:字符串分割(简单直观)

如果日志格式固定,可通过字符串分割提取目标数字,无需引入正则库:

log_content = """Jun 23 10:10:03 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 145.89.182.65 -> 145.89.109.49 (0/0), 6 packets 
Jun 23 10:18:40 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 95.9.149.232 -> 145.89.109.49 (0/0), 1 packet 
Jun 23 10:57:05 145.89.109.1 : %SEC-6-IPACCESSLOGDP: list 120 denied icmp 169.244.237.130 -> 145.89.109.49 (0/0), 3 packets"""

total = 0
# 按行遍历日志
for line in log_content.splitlines():
    # 按逗号拆分取后半段,再按空格拆分取第一个元素
    count = int(line.split(',')[1].strip().split()[0])
    total += count

print(f"总数据包数量:{total}")

两种方法运行后都会输出总数据包数量:10,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:45:47