Разбор текста через python - PullRequest
0 голосов
/ 01 июня 2018

У меня есть 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

КОД:

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 голосов
/ 25 июня 2018

Я даю вам удовольствие создавать код вокруг этого.

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})"
...