通过python解析文本

时间:2018-06-01 18:56:26

标签: python parsing text

我有100多个扩展名为* .log的文件。每个文件都包含ansible-playbook运行的结果。我想使用python解析数据,以便我可以将它导入到Excel电子表格中。我需要一些帮助来自动化这个过程。 文件内容为:

ok: [wrt02.test1] => {
    "msg": "nxos"
}
TASK [checklist : OUTPUT IOS_XR] *******************************************************************************************************************************************************************************************************
skipping: [leaf1J0101.test2]
skipping: [leaf1J0102.test2]
ok: [spine01.test1] => {
    "msg": [
        "Bundle-Ether1.100              192.168.245.65    Up              Up       default ", 
        "Bundle-Ether10.151             192.168.203.3   Up              Up       default ", 
        "Loopback0                      192.168.255.7     Up              Up       default ", 
        "MgmtEth0/RSP0/CPU0/0           192.168.224.15    Up              Up       MANAGEMENT", 
        "TenGigE0/0/0/2                 192.168.114.114    Up              Up       default ", 
        "TenGigE0/0/0/3                 192.168.82.170    Up              Up       default"
    ]
}

结果: spine01.test1,Bundle-Ether1.100,192.168.245.65, spine01.test1,Bundle-Ether10.151,192.168.203.3, spine01.test1,Loopback0,192.168.255.7, spine01.test1,MgmtEth0/RSP0/CPU0/0,192.168.224.15, spine01.test1,TenGigE0/0/0/2,192.168.114.114, spine01.test1,TenGigE0/0/0/3,192.168.82.170

CODE:

def findIOS(output):
# String we're looking for
OUTIOS_string = "TASK [checklist : OUTPUTIOS] ***************************************************************************************************************************************************************************************************************"
end_string = "TASK"
# Find the start of our string
start_index = output.find(OUTIOS_string) + len(OUTIOS_string) + 2
# Find the end of our string
end_index = output.find(end_string, start_index + 1)
lines = output[start_index:end_index].split('\n')
# Create a list to store our resulting dictionaries
#print lines
d = []
for line in lines:
    #print line
    if line != "":
        # If line is not empty, find our starting and closing brackets
        # Find the host:
        hstart = line.find('[')
        hend = line.rfind(']') + 1
        start = line.find('{')
        end = line.rfind('}') + 1
        hostname = line[hstart:hend]
        # Store content between brackets
        obj = line[start:end]
        hostname = hostname.replace("[", "").replace("]","")
        print hostname
        print obj
        # Convert string to dictionary, and store the results
        d.append(eval(obj))
        print d
return d

def main():
output = None
with open("../showint.log", "rb") as f:
    output = f.read()

if __name__ == '__main__':
    main()

如何获取以上格式?谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我很乐意为此创建代码。

import re

# This matches the msg pattern
find_start = r"^\s+\"msg\":\s\["
# This matches the line with the information you want that you can access with match.groups()
find_line = r"^\s+\"([^\s]+)\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"