繁体   English   中英

使用Python查找分离和处理重复的行块

[英]Finding separating and processing repeatative blocks of lines with Python

我写了脚本来分析包含要查找的行的文本:

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个字符串中的总数进行比较。 我编写了程序,该程序借助这三种类型的字符串的正则表达式和结果组来完成这项工作。

现在,我正在考虑如果文本中很少有这样的输出,如何使它起作用? 最优雅的实现方式是什么? 我知道我需要在处理完第一个块后将计数器重置为0,然后再次搜索所有这3种类型的字符串,但是如何做到最好? 这是当前的脚本:

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:")

我将引入块边界的概念,当您将一行与"Uplink Bytes:"或空行(如果这些块之间存在一个)匹配时,就会看到这种情况。

当您检测到进入新块时,将重置所有计数器。

您仍然可以一一处理所有行。

根据要对每个块计算的数据的处理方式,可能需要将所有计数器和一些相关代码封装到一个小类中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM