Анализ неструктурированного файла журнала в python

#python #python-3.x #lo&&in&

#python #python-3.x #ведение журнала

Вопрос:

Я хотел проанализировать файл файла журнала, который содержит неструктурированный текст. Мне нужно получить идентификатор ядра, пройти / потерпеть неудачу в json. Я новичок в программировании, застрявший на этом с неделю, буду признателен за любую помощь.

 AMPTTK v25: RSA ALL THREADS
================RSACores X RSACores==============
time: 421045.73
Num Threads Available to process: 256
Num Cores   Requested to execute: 256
TSC freq: 1600629120.0

Memory allocated @ main (not all used by pro&ram): 3842.000000 MB

  RSA thread:       : 0
wrkspace addr       : 7f0483400000
wrkspace size       : f00000

        # cores:   16
        core id:      0,      1,      2,      3,      4,      5,      6,      7,     64,     65,     66,     67,     68,     69,     70,     71,
      pass/fail:   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,
       test ipc:  4.497,  4.503,  4.489,  4.476,  4.537,  4.471,  4.499,  4.459,  4.934,  4.946,  4.892,  4.933,  4.927,  4.927,  4.882,  4.886,
     aperf(MHz):   2826,   2814,   2826,   2826,   2826,   2826,   2827,   2826,   2909,   2909,   2909,   2909,   2909,   2909,   2909,   2909,
      aperf ipc:  2.392,  2.408,  2.397,  2.392,  2.397,  2.388,  2.397,  2.388,  2.341,  2.341,  2.340,  2.341,  2.341,  2.341,  2.340,  2.340,
     mce status:   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,   pass,
  

Ответ №1:

Обычно я бы сделал это так, чтобы найти структуру в файле журнала, а затем извлечь ее. Просматривая данные, которыми вы поделились, в интересующих строках содержится один : символ и шестнадцать значений, разделенных запятыми. Поскольку данные не представлены в форме, позволяющей напрямую перевести их в json, я сохранил их во временном словаре, чтобы затем преобразовать их в строку json. Пример ниже:

 import json

# parse the lo& file and store in dictionary
raw_data = {}
with open('unstructured_data.txt') as lo&:
    for line in lo&:
        line = line.rstrip()
        if line.count(':') == 1:
            headin&, data = line.split(':')
            fields = data.split(',')
            if len(fields) &&t; 15:
                raw_data[headin&.lstrip()] = fields

# Put only data of interest in to another python dictionary
result_data = {}
for i in ran&e(len(raw_data['core id'])):
    result_data[raw_data['core id'][i].strip()] = raw_data['pass/fail'][i].strip()

# Convert python dictionary to json strin&
result_json = json.dumps(result_data)

print(result_json)
  

Выдает следующее из вашего файла журнала:

 $ python3 parse_lo&.py 
{"0": "pass", "1": "pass", "2": "pass", "3": "pass", "4": "pass", "5": "pass", "6": "pass", "7": "pass", "64": "pass", "65": "pass", "66": "pass", "67": "pass", "68": "pass", "69": "pass", "70": "pass", "71": "pass", "": ""}
  

Хотя это и не идеальный результат, мы надеемся, что это будет что-то, что можно улучшить с помощью реальных данных.