33 HEIGHT  5 5 INFO ABSENT FROM SCHOOL 123 

    He has been absent for 48 hours

                                                                     

     NOLAN Time:2020-07-14 12:34:08 PAUL

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

Это различные столбцы и строки:

COUNT | HEIGHT | MESSAGE_TITLE | BODY | SCHHO | DATETIME | NAME

33 | 5.5 | ИНФОРМАЦИЯ ОТСУТСТВУЕТ В ШКОЛЕ 123 | Он был ... | НОЛАН | Время: 2020-07-14 12: 34: 08 | ПОЛ

Я начал с того, что не продвинулся ..

Import pandas as PD import NumPy as np import glob import os import JSON import wx from DateTime import DateTime import DateTime as dt import time as t

Импортировать matplotlib.pyplot как plt

Импортировать xlsxwriter

С open ('STUDENT_PROFILE.log') как f:

log = f.readlines()
print(log)

len(log)

n = len(log)

Для i в диапазоне (n):

log[i] = log[i].strip()

Журнал [6] .split (']')

Журнал [6] .split (']') [7]

Журнал [6] .split (']') [7] .upper ()

S = журнал [0] .split (']') [0] .strip ('[')

Dtfmt = '% Y-% m-% d% I:% M:% S' #% H -> 24 часа,% I-> 12 часов

Dt2 = datetime.strptime (s, dtfmt)

Для строки в журнале:

s1=line.split(']')[0].strip('[')

dt2 = dt.strptime(s1, dtfmt)

col1.append(dt2)

s= line.split(']')[1].strip().split(':')

col2.append(s[0])

if len(s) == 7:

    col3.append(s[1])
    col4.append(s[2])
    col5.append(s[3])
    col6.append(s[4])
    col7.append(s[5])
    col8.append(s[6])

else:

    col8.append(np.nan)

Df = pd.DataFrame ([col1, col2, col3, col4, col5, col6, col7, col8])

Df = df.T

Df.columns = ['COUNT', 'HEIGHT', 'MESSAGE_TITLE', 'BODY', 'SCHHOL', 'DATETIME', 'NAME']

Df ['delta_t'] = df.datetime - df.datetime [0]

Df ['delta_t_seconds'] = 0

Для i в диапазоне (df.shape [0]):

df.ix[i,'delta_t_seconds'] = df.delta_t.iloc[i].seconds

Df.to_csv ('test_log.csv', index = False)

Любые идеи...

0
Greatpomps 19 Июл 2020 в 08:54

1 ответ

Лучший ответ

При отсутствии ограничений это должно сработать. Обратите внимание на часть, где есть 5 5, вам нужно будет обработать добавление точки. Regex просто соответствует набору шаблонов; как таковая его задача не заключается в добавлении или удалении персонажей.

Кроме того, я заметил, что вы читаете строки и повторяете их. Для того, чтобы этот шаблон работал, он предполагает одну единственную многострочную строку, поэтому вам необходимо присоединить массив с символами новой строки.

Это ни в коем случае не изящное решение и ни в коем случае не пуленепробиваемое с ограниченным вводом примеров или ограничениями.

Узор

\s+(\d+)\s+HEIGHT\s+(\d\s\d{1,2})\s+([^\n\r]+)\W+([^\n]+)\W+([A-Z]+)\sTime:(\S+\s+\S+)\s+([A-Z]+)

См. Демонстрацию здесь.

0
Bren 19 Июл 2020 в 06:45