Извлечь часть данных в файл журнала

Я анализирую данные из файла журнала. Мой файл журнала выглядит следующим образом:

[2018-07-13 03:04:57] production.DEBUG: No problem MemId: 000MemId or CardNo 
There is no staff information
MemId: 2956144 without the bird - file; mbs
There is no staff information
There is no staff information
[2018-07-13 03:06:07] production.DEBUG: No problem MemId: 00mem_id or CardNo

И я хочу создать DataFrame в pandas. Мой ожидаемый результат:

TimeStand           Screen           Level         messenger
2018-07-13 03:04:57 production  DEBUG    No problem MemId...staff information
2018-07-13 03:06:07 production  DEBUG    No problem MemId:  00mem_id or CardNo

Так :

Извлечь часть данных в файл журнала

Я думал об использовании регулярных выражений, но я новичок в Python.

Пожалуйста, предоставьте нам код, над которым вы сейчас работаете.

N. Arunoprayoch 13.06.2019 11:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
72
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я бы предложил начать читать код:

import pandas as pd
TimeStand, Screen, Level, messenger = []
log = open('log.txt', 'r')
for line in log:
    if ....:
         TimeStand.append(...)
    elif ....:
         Screen.append(...)
 df = pd.DataFrame({'TimeStand': TimeStand, 'Screen': Screen, 'Level': Level, 'messenger': messenger
Ответ принят как подходящий

Я написал код, вы не указали много, но вы получите представление о том, как использовать регулярное выражение, и вы сможете им манипулировать. также удалите некоторые символы, используя поиск в Google str.strip.

import re
import pandas as pd



st= '[2018-07-13 03:04:57] production.DEBUG: No problem MemId: 000MemId or CardNo There is no staff information MemId: 2956144 without the bird - file; mbs There is no staff information here is no staff information [2018-07-13 03:06:07] production.DEBUG: No problem MemId: 00mem_id or CardNo [2018...etc]'


timelist=re.findall('\[\w\S*\s\w*\S*]',st)
df=pd.DataFrame({'TimeStand': timelist})
screenlist=re.findall(r'\bproduction\b',st)
df['Screen']=screenlist
levellist=re.findall(r'\bDEBUG\b',st)
df['Level']=levellist
messengerlist=re.findall(r'\: .*?\[',st)
df['Messenger']=messengerlist

Вывод выглядит так-

TimeStand      Screen  Level  \
0  [2018-07-13 03:04:57]  production  DEBUG   
1  [2018-07-13 03:06:07]  production  DEBUG   

                                           Messenger  
0  : No problem MemId: 000MemId or CardNo There i...  
1           : No problem MemId: 00mem_id or CardNo [  

Привет. После вашего файла мне нужно добавить «[». Так что это неправда

Phạm Văn Trình 13.06.2019 12:32

вот что я сказал, используйте str.strip для удаления [ и : в этих столбцах, и все готово.

DJKarma 13.06.2019 12:53

Привет, если значение экрана не просто производство, это может быть другое значение. И я пытаюсь написать регулярное выражение для этой части, но я еще этого не сделал.

Phạm Văn Trình 19.06.2019 10:34

У меня есть это решение. Мой код:

import pandas as pd
import json
import pyes # For documentation around pyes.es : https://pyes.readthedocs.org/en/latest/references/pyes.es.html
import requests
import  numpy as np
import datetime
import inspect
import re


v = open(r"C:/laravel-2019-06-01.log","r",encoding='utf-8-sig')


st = v.read()

st = st + '[2018-07-14]'

st = st.replace('\n',' ')

timelist=re.findall('\d{4}[-/]\d{2}[-/]\d{2} \d{2}[:]\d{2}[:]\d{2}',st)
df=pd.DataFrame({'TimeStand': timelist})
screenlist=re.findall(r'\d{2}[:]\d{2}[:]\d{2}\].*?\.',st)
df['TimeStand'] = df['TimeStand'].str.strip('][')
df['Screen']=screenlist
df['Screen'] = df['Screen'].map(lambda x: str(x)[10:])
df['Screen'] = df['Screen'].map(lambda x: str(x)[:-1])
levellist=re.findall(r'\d{2}[:]\d{2}[:]\d{2}\].*?\..*?\:',st)
df['Level']=levellist
df['Level'] = df['Level'].map(lambda x: str(x)[21:])
df['Level'] = df['Level'].map(lambda x: str(x)[:-1])
messengerlist=re.findall(r'\d{2}[:]\d{2}[:]\d{2}\].*?\..*?\: .*?\[\d{4}[-/]\d{2}[-/]\d{2}',st)
df['Messenger']=messengerlist
df['Messenger']  = np.where(df['Level']=='ERROR',df['Messenger'].map(lambda x: str(x)[27:]),np.where(df['Level']=='DEBUG',df['Messenger'].map(lambda x: str(x)[27:]),np.where(df['Level']=='CRITICAL',df['Messenger'].map(lambda x: str(x)[30:]),np.where(df['Level']=='ALERT',df['Messenger'].map(lambda x: str(x)[27:]),np.where(df['Level']=='NOTICE',df['Messenger'].map(lambda x: str(x)[28:]),np.where(df['Level']=='INFO',df['Messenger'].map(lambda x: str(x)[26:]),np.where(df['Level']=='WARNING',df['Messenger'].map(lambda x: str(x)[29:]),df['Messenger'].map(lambda x: str(x)[31:]))))))))

df['Messenger']  = df['Messenger'].map(lambda x: str(x)[:-11])

print(df)

Я надеюсь, что это решение поможет тем, кто в нем нуждается. Спасибо большое

Другие вопросы по теме