为了账号安全,请及时绑定邮箱和手机立即绑定

使用python将日志文件转换为字典格式

使用python将日志文件转换为字典格式

潇湘沐 2022-06-28 10:42:59
我需要使用 python 将日志文件转换为字典格式show_pcs = 1     Po1(SU)     Eth      LACP      Eth1/24(P)   Eth2/24(P)   Eth3/24/10(P)                                     Eth4/24(P)   2     Po2(SU)     Eth      LACP      Eth1/1/1(P)  Eth1/1/2(P)  Eth1/1/3(P)                                     Eth1/1/4(P)  Eth2/1/1(P)  Eth2/1/2(P)                                     Eth2/1/3(P)  Eth2/1/4(P)  3     Po3(SD)     Eth      NONE      --4     Po4(SD)     Eth      NONE      --5     Po5(SD)     Eth      LACP      Eth1/3/1(P)  Eth1/3/2(P)  Eth1/3/3(P)                                     Eth101/3/4(D)  Eth2/3/1(P)  Eth2/3/2(P)                                     Eth2/3/3(P)  Eth2/3/4(D)  6     Po6(SU)     Eth      LACP      Eth1/14/1(P)  Eth1/14/2(P)  Eth1/14/3(P)                                     Eth1/14/4(P)  Eth102/14/1(P)  Eth2/14/2(P)                                     Eth2/14/3(P)  Eth2/14/4(P)  7     Po7(SD)     Eth      LACP      Eth1/22(P)   Eth2/22(P)   Eth3/22(P)                                     Eth107/1/22(D)   8     Po8(SU)     Eth      LACP      Eth1/23(P)   Eth2/23(P)   Eth3/23(P)d_t = {}pattern_1= 'Po\d+'pattern_2='Eth\d+\/\d+(?:\/\d+)?\((?:P|D)\)'result_1 = re.findall(pattern_1,show_pcs)result_2 = re.findall(pattern_2,show_pcs)for p1 in result_1:    for p2 in result_2:        d_t[result_1] = result_2print(d_t){ 'Po1' : ['Eth1/24(P)', 'Eth2/24(P)', 'Eth3/24/10(P)','Eth4/24(P)'], 'Po2': ....}
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

show_pcs = '''



    1     Po1(SU)     Eth      LACP      Eth1/24(P)   Eth2/24(P)   Eth3/24/10(P)

                                         Eth4/24(P)   

    2     Po2(SU)     Eth      LACP      Eth1/1/1(P)  Eth1/1/2(P)  Eth1/1/3(P)

                                         Eth1/1/4(P)  Eth2/1/1(P)  Eth2/1/2(P)

                                         Eth2/1/3(P)  Eth2/1/4(P)  

    3     Po3(SD)     Eth      NONE      --

    4     Po4(SD)     Eth      NONE      --

    5     Po5(SD)     Eth      LACP      Eth1/3/1(P)  Eth1/3/2(P)  Eth1/3/3(P)

                                         Eth101/3/4(D)  Eth2/3/1(P)  Eth2/3/2(P)

                                         Eth2/3/3(P)  Eth2/3/4(D)  

    6     Po6(SU)     Eth      LACP      Eth1/14/1(P)  Eth1/14/2(P)  Eth1/14/3(P)

                                         Eth1/14/4(P)  Eth102/14/1(P)  Eth2/14/2(P)

                                         Eth2/14/3(P)  Eth2/14/4(P)  

    7     Po7(SD)     Eth      LACP      Eth1/22(P)   Eth2/22(P)   Eth3/22(P)

                                         Eth107/1/22(D)   

    8     Po8(SU)     Eth      LACP      Eth1/23(P)   Eth2/23(P)   Eth3/23(P)

    '''


l = [i.strip() for i in show_pcs.split('\n') if len(i.strip())>0]


l = [j for i in l for j in i.split() if len(j)>0] 


lst1 = []

lst = []

for i in l:

    if i.isdigit():

        if lst !=[]:

            lst1.append(lst)

        else:

            lst=[i]

    else:

        lst.append(i)



dic = {i[1]:i[2:] for i in lst1}


print(dic)

输出


{'Po1(SU)': ['Eth', 'LACP', 'Eth1/24(P)', 'Eth2/24(P)', 'Eth3/24/10(P)', 'Eth4/24(P)', 'Po2(SU)', 'Eth', 'LACP', 'Eth1/1/1(P)', 'Eth1/1/2(P)', 'Eth1/1/3(P)', 'Eth1/1/4(P)', 'Eth2/1/1(P)', 'Eth2/1/2(P)', 'Eth2/1/3(P)', 'Eth2/1/4(P)', 'Po3(SD)', 'Eth', 'NONE', '--', 'Po4(SD)', 'Eth', 'NONE', '--', 'Po5(SD)', 'Eth', 'LACP', 'Eth1/3/1(P)', 'Eth1/3/2(P)', 'Eth1/3/3(P)', 'Eth101/3/4(D)', 'Eth2/3/1(P)', 'Eth2/3/2(P)', 'Eth2/3/3(P)', 'Eth2/3/4(D)', 'Po6(SU)', 'Eth', 'LACP', 'Eth1/14/1(P)', 'Eth1/14/2(P)', 'Eth1/14/3(P)', 'Eth1/14/4(P)', 'Eth102/14/1(P)', 'Eth2/14/2(P)', 'Eth2/14/3(P)', 'Eth2/14/4(P)', 'Po7(SD)', 'Eth', 'LACP', 'Eth1/22(P)', 'Eth2/22(P)', 'Eth3/22(P)', 'Eth107/1/22(D)', 'Po8(SU)', 'Eth', 'LACP', 'Eth1/23(P)', 'Eth2/23(P)', 'Eth3/23(P)']}



查看完整回答
反对 回复 2022-06-28
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

好吧,一种直接的方法是查看日志文件的结构。如果Po键是第二个字符串,可以执行以下操作:


log_line = '1     Po1(SU)     Eth      LACP      Eth1/24(P)   Eth2/24(P)   Eth3/24/10(P)'


log_line_list = log_line.split()   # will look like: ['1', 'Po1(SU)', 'Eth', ...]

k = log_line_list[1]               # will hold 'Po1(SU)'

log_line_list.remove(k)            # remove the key from the list


d = {k: log_line_list}


print(d)


>> {'Po1(SU)': ['1', 'Eth', 'LACP', 'Eth1/24(P)', 'Eth2/24(P)', 'Eth3/24/10(P)']}

你可以用一个方法来包装它:


def dict_from_log(log_line):

    l = log_line.split()

    k = l[1]

    l.remove(k)

    return {k: l}

并遍历您的日志行:map(dict_from_log, log_lines)


查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 347 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号