Как проанализировать этот журнал, чтобы получить дату / время для построения графиков с помощью Python3 - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть журнал, который выглядит следующим образом:

 **  &nbspWed; Feb 20 2019 at 12:38:10:734 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                          
 **  &nbspWed; Feb 20 2019 at 12:38:12:742 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                          
 **  &nbspWed; Feb 20 2019 at 12:38:14:721 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                          
 **  &nbspWed; Feb 20 2019 at 12:38:16:777 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                          
 **  &nbspWed; Feb 20 2019 at 12:38:18:729 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                           
 **  &nbspWed; Feb 20 2019 at 12:38:20:700 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                           
 **  &nbspWed; Feb 20 2019 at 12:38:22:697 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                           
 **  &nbspWed; Feb 20 2019 at 12:38:24:706 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7                                                                                           
 **  &nbspWed; Feb 20 2019 at 12:38:26:783 PM :  ** **  &nbspGnssLocationListener; \- 41** \- onSatelliteStatusChanged() : fixCount = 7 

Я пытаюсь получить следующие данные из этого:

12:38:10 PM , 7
12:38:12 PM , 7
12:38:14 PM , 7
12:38:16 PM , 7
12:38:18 PM , 7
...

И я пытаюсьделайте это с тем, что я знаю в Python ... Это довольно элементарно.

import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
import csv

data = []
datafile = open('fix_count_02-20-2019-day.txt' , 'r')
datareader = csv.reader((x.replace('\0','') for x in datafile), delimiter=':')
for row in datareader:
        data.append(row)


np_data = np.asarray(data)
print(np_data)

plt.subplots_adjust(bottom=0.2)
plt.xticks( rotation=25 )
ax=plt.gca()
#xfmt = md.DateFormatter('%H:%M:%S')
#ax.xaxis.set_major_formatter(xfmt)
plt.plot(np_data)

plt.show()

Я пробовал немного гимнастики с split и join, но это не помогло мне... В конечном итоге я хочу нарисовать этот похожий на этот вопрос, вероятно (я предполагаю), с массивом numpy:

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Предполагая, что имя файла журнала - log.txt

with open('log.txt', 'r') as log:
    lines = log.readlines()
    for line in lines:
        line = line.strip()
        print('{} {} , {}'.format(line[29:37], line[42:44], line[-1]))

Вывод

12:38:10 PM , 7
12:38:12 PM , 7
12:38:14 PM , 7
12:38:16 PM , 7
12:38:18 PM , 7
12:38:20 PM , 7
12:38:22 PM , 7
12:38:24 PM , 7
12:38:26 PM , 7
0 голосов
/ 20 февраля 2019

РЕДАКТИРОВАТЬ: обновил вопрос, так как я только что понял, что вы пытаетесь использовать numpy для отображения результатов, а не для анализа данных.

Вы захотите использовать простой шаблон регулярных выражений для анализа этогожурнальный файл.Вы можете составить список результатов, которые вам нравятся.

Вот шаблон регулярных выражений, который будет анализировать ваше время и fixCount в группы совпадений:

.*((?:\d{2}:){3}\d{3} (?:PM|AM)).*fixCount = (\d+)

Ссылка наэто в действии: https://regexr.com/48ph8

Пожалуйста, посмотрите https://pythonicways.wordpress.com/2016/12/20/log-file-parsing-in-python/ для хорошего примера того, как делать то, что вы хотите.

Решение будет примерно таким:

import re

log_file_path = 'fix_count_02-20-2019-day.txt'
regex = r'.*((?:\d{2}:){3}\d{3} (?:PM|AM)).*fixCount = (\d+)'

match_list = []
with open(log_file_path, 'r') as file:
    data = f.read()
    for match in re.finditer(regex, data, re.S):
        match_text = match.group(0), match.group(1)
        match_list.append(match_text)
        print match_text

# do something with match_list here
...