我写了一个脚本来分析包含要找到的行的文本:
Uplink Bytes: 6168 Downlink Bytes: 40366
Uplink Packets: 69 Downlink Packets: 72
Access list name Pkts-Down Bytes-Down Pkts-Up Bytes-Up
tcp 14 3763 15 1622
web 58 36603 54 4546
<....>
它为具有单独访问列表(如tcp和web)的字符串的列中的数字求和,然后将总和与前2个字符串中的总数进行比较。我编写了这个程序,它使用regualr表达式和结果组来帮助完成这三种类型的字符串。
现在我正在考虑如果文本中的输出很少,如何使它工作?什么是最优雅的方式来实现它? 我知道我需要在处理完第一个块之后将计数器重置为0并再次搜索所有这三种类型的字符串但是如何以最佳方式执行此操作? 这是当前的脚本:
import re
with open(input_file) as f:
d_b = 0
d_p = 0
u_b = 0
u_p = 0
lines = f.readlines()
for line in lines:
res = re.search('Uplink B\w+: +(\d+) +Downlink \w+: +(\d+)',line)
if (res):
s_u_b = int(res.group(1))
s_d_b = int(res.group(2))
res = re.search('Uplink P\w+: +(\d+) +Downlink \w+: +(\d+)',line)
if (res):
s_u_p = int(res.group(1))
s_d_p = int(res.group(2))
res = re.search('^[0-9a-zA-Z-_]+\ +(\d+) +(\d+) +(\d+) +(\d+) +\d+',line)
if (res):
d_p += int(res.group(1))
d_b += int(res.group(2))
u_p += int(res.group(3))
u_b += int(res.group(4))
if (d_b == s_d_b) and (u_b == s_u_b)
and (d_p == s_u_p) and (u_p == s_u_p):
print("No mismatch between subsession stats and ECS stats found")
else :
print("Mismatch between subsession stats and ECS stats found:")
答案 0 :(得分:0)
我将介绍块边界的概念,当您使用"Uplink Bytes:"
或空行(如果这些块之间存在一个)时,可以看到这种情况。
当您检测到进入新区块时,您将重置所有计数器。
您仍然可以逐个处理所有行。
根据您为每个块计算的数据要做什么,您可能希望将所有计数器和一些相关代码封装到一个小类中。