如何用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
相关产品推荐
相关产品推荐

