python .findall结果可读

时间:2016-07-10 23:42:05

标签: python list findall

需要帮助在python中对.findall的结果进行排序,以便以某种可读格式转换结果。 我有一个片段给我输出

[('Jul 11 11:25:51', 'ul 11 11:25:51', '', '', ''), ('', '', 'u2k', '', ''), ('', '', '', 'CBDCS2.CTP', ''), ('Jul 11 11:25:52', 'ul 11 11:25:52', '', '', ''), ('', '', 'u2k', '', ''), ('', '', '', 'WNDCS2.WTC', ''), ('Jul 11 11:25:53', 'ul 11 11:25:53', '', '', ''), ('', '', '', '', 'interface GigabitEthernet 2/0/44 '), ('', '', 'lqin', '', ''), ('', '', '', 'CASWNTHS151', ''), ('Jul 11 11:25:55', 'ul 11 11:25:55', '', '', ''), ('', '', 'u2k', '', ''), ('', '', '', 'asuspmk02', ''), ('Jul 11 11:25:55', 'ul 11 11:25:55', '', '', ''), ('', '', 'u2k', '', ''), ('', '', '', 'h_asuspmk01', ''), ('Jul 11 11:26:13', 'ul 11 11:26:13', '', '', ''), ('', '', '', 'cis1tow', ''), ('Jul 11 11:26:32', 'ul 11 11:26:32', '', '', ''), ('', '', '', '', 'show rpl route-policy RP-AKAMAI-LDV-OUT attachpoints '), ('', '', 'lyang', '', ''), ('', '', '', 'bgnzldv02', ''), ('Jul 11 11:26:32', 'ul 11 11:26:32', '', '', ''), ('', '', '', '', 'switchport voice vlan 462 '), ('', '', 'lqin', '', ''), ('', '', '', 'CASWNTHS151', ''), ('Jul 11 11:26:38', 'ul 11 11:26:38', '', '', ''), ('', '', '', '', 'copy running-config startup-config '), ('', '', 'lqin', '', ''), ('', '', '', 'CASWNTHS151', ''), ('Jul 11 11:26:57', 'ul 11 11:26:57', '', '', ''), ('', '', 'lqin', '', ''), ('', '', '', 'CASWNTHS151', '')]

需要输出

Jul 11 11:25:51   ul 11 11:25:51 u2k CBDCS2.CTP

Jul 11 11:25:51   ul 11 11:25:51 u2k WNDCS2.WTC

等等

以下代码段

p = re.compile(r'([J](\S+\W+\S+\W+\S+))|User=(\S\S+),|NetworkDeviceName=(\S\S+),|CmdAV=([^\<]*)')
    results = re.findall(p,output)
    file4.write(str(results))

输入如下

Jul 11 11:58:37 CSCOacs_TACACS_Accounting 0034182898 1 0 2016-07-11 TACACS+ Accounting with Command, ACSVersion=acs-5.6.0.22-B.225, ConfigVersionId=18, Device IP Address=10.125.89.1, CmdSet=[ CmdAV=show rpl route-policy RP-GGC-CTP-OUT attachpoints <cr> ], RequestLatency=0, Type=Accounting, Privilege-Level=0, Service=Login, User=lyang, Port=/dev/vty10, Remote-AVPair=priv-lvl=0, AcctRequest-Flags=Stop, Service-Argument=shell, AcsSessionID=imau03ftc/256670213/33719073, NetworkDeviceName=u2k NetworkDeviceGroups=All Devices:All 

2 个答案:

答案 0 :(得分:0)

此代码:

line = []
for d in results:
    if d[0] != '':
        if len(line)>0:
            print " ".join(line)
        line = []
    for dx in d:
        if dx != '':
            line.append( dx )
if len(line)>0:
    print " ".join(line)
results如问题顶部所示时,

产生此输出:

Jul 11 11:25:51 ul 11 11:25:51 u2k CBDCS2.CTP
Jul 11 11:25:52 ul 11 11:25:52 u2k WNDCS2.WTC
Jul 11 11:25:53 ul 11 11:25:53 interface GigabitEthernet 2/0/44  lqin CASWNTHS151
Jul 11 11:25:55 ul 11 11:25:55 u2k asuspmk02
Jul 11 11:25:55 ul 11 11:25:55 u2k h_asuspmk01
Jul 11 11:26:13 ul 11 11:26:13 cis1tow
Jul 11 11:26:32 ul 11 11:26:32 show rpl route-policy RP-AKAMAI-LDV-OUT attachpoints  lyang bgnzldv02
Jul 11 11:26:32 ul 11 11:26:32 switchport voice vlan 462  lqin CASWNTHS151
Jul 11 11:26:38 ul 11 11:26:38 copy running-config startup-config  lqin CASWNTHS151
Jul 11 11:26:57 ul 11 11:26:57 lqin CASWNTHS151

这是否是作者想要的,很难从模棱两可的问题中辨别出来。

答案 1 :(得分:-1)

您是否尝试过格式化输出?

p = re.compile(r'([J](\S+\W+\S+\W+\S+))|User=(\S\S+),|NetworkDeviceName=(\S\S+),|CmdAV=([^\<]*)')
results = re.findall(p,output)
file4.write('\n'.join([' '.join([str(i) for i in row]) for row in results]))