Mam dziennik, który wygląda tak:

 **  &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 

Próbuję uzyskać następujące dane z tego:

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
...

I próbuję to zrobić z tym, co znam w Pythonie ... co jest bardzo prymitywne.

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()

Próbowałem jakiejś gimnastyki z {x0}} i join, ale tak naprawdę nie działało dla mnie ... ostatecznie chcę wykreślić ten podobny do Ta pytanie, prawdopodobnie (zgaduję) z numpy tablicą:

1
testname123 20 luty 2019, 23:25

2 odpowiedzi

Najlepsza odpowiedź

Zakładając, że nazwa pliku dziennika jest 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]))

Wynik

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
balderman 20 luty 2019, 20:40

Edytuj: Zaktualizowano pytanie, ponieważ właśnie zdałem sobie sprawę, że próbowałem użyć numpry, aby wykreślić wyniki, nie analizować danych.

Będziesz chciał użyć prostego wzoru Regex, aby przeanalizować ten plik dziennika. Możesz produkować listę wyników z tym, co chcesz.

Oto wzorzec REGEX niż przeanalizowanie czasu i fixCount do grup meczowych:

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

Link do niego w akcji: https://regexr.com/48PH8

Proszę zobaczyć https://Pythonalways.wordpress.com / 2016/12 / 20 / log-parsing-in-Python / dla dobrego przykładu tego, jak zrobić to, co chcesz.

Rozwiązaniem będzie coś takiego:

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
1
Julian 20 luty 2019, 21:04