0

Radius キャプチャ ファイルがあり、それを解析する必要があります。個々の値のペアを取得して集計するにはどうすればよいですか。ファイルの簡単なスニペットを次に示します。

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

これが何度も繰り返され、構造は同じですが値は異なります。

"if "Acct-Input-Octets" inオクテットを集約する必要がありますが、構造化するだけなので簡単です。

問題は、Session-Time が 0 になる (つまり、再接続する) 場合に合計が変化することです。したがって、現在の合計をリセットする必要がありますが、そうでない場合はエラーになります (RADIUS 入力オクテットでは、新しいセッション ID でリセットする必要があります)。

4

2 に答える 2

0

正規表現のアプローチは次のとおりです。

手順:

1- 時間とオクテットを 2 つのリストに読み込む

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 に答える
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 に答える