0

我有一个半径捕获文件,我需要解析它。如何获取单个值对并聚合它们。这是文件的快速片段:

Acct-Session-Id = "1234adb"
Acct-Session-Time = 141312
Acct-Input-Octets = 1234123

这不断重复,不断地具有相同的结构但不同的值。

我需要聚合八位字节,这很容易,因为我只是做"if "Acct-Input-Octets" in结构。

问题在于如果会话时间变为 0(即他们重新连接),总将发生变化。因此,运行总数需要重置,除非在这种情况下它是错误的(在 RADIUS 中,输入八位字节必须使用新的会话 ID 重置)。

4

2 回答 2

0

像这样的东西?

totals = 0
for line in fileObj:
    name, value = line.split('=')
    if name.strip() == 'Acct-Session-Time' and value.strip() == '0':
        totals = 0
    elif name.strip() == 'Acct-Input-Octets':
        totals += int(value.strip())
于 2013-02-23T23:39:19.203 回答
0

这是一个正则表达式方法:

脚步:

1-将时间和八位字节读入两个列表

2-超时并存储'0'元素的最后一个索引,同时检查八位字节的相同索引并确保它是否也是'0',如果不是抛出异常

3-将八位字节中的值从末尾到最后一个索引“0”相加

import re

log = open('log.txt').read()

times = re.findall('Acct-Session-Time\s*=\s*(\d+)\s*', log)
octets = re.findall('Acct-Input-Octets\s*=\s*(\d+)\s*', log)

last_zero_index = 0

for i in range(0, len(times)):
    if times[i] == '0':
        last_zero_index = i
        if octets[i] != '0':
            raise Exception('Session time is reset but the usage is not')

totals = 0

for value in octets[-last_zero_index:]:
    totals += int(value)

print(totals)
于 2013-02-24T00:43:00.910 回答