Диаграммы значений с использованием Python - PullRequest
1 голос
/ 18 октября 2019

У меня есть файл журнала, который показывает данные, отправленные в следующем формате -

2019-10-17T00: 00: 02 | Соединение (10.0.0.89: 0) r = 0 с = 1024d = 0 t = 0 q = 0 # подключено 2019-10-17T00: 00: 02 | McSend (229.0.0.70: 20001) b = 1635807
f = 2104 d = 0 t = 0

В каждом файле будет несколько строк

Как я могу отобразить значение b = против времени (около начала строки), но только по линиям McSend

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Вы должны читать ваш файл построчно. Затем просканируйте каждую строку, если она содержит «McSend». Если это так, то получите нужные данные.

Вы можете сделать что-то вроде этого:


b_values = []
dates = []

## Lets open the file and read it line by line
with open(filepath) as f:
    for line in f:
## If the line contains McSend
        if 'McSend' in line :
## We split the line by spaces ( split() with no arguments does so )
            splited_line = line.split()
## First string chunk contains the header where the date is located
            header = splited_line[0]
## Then retrieve the b value 
            for val in splited_line :
                if val.startswith('b=') :
                    b_value = val.split("=",1)[1] 
## Now you can add the value to arrays and then plot what you neet
                    b_values.append(b_value)
                    dates.append(header.split("|",1)[0] 
## Do your plot
0 голосов
/ 18 октября 2019

Если вы не знакомы с регулярными выражениями - регулярное выражение Python Документация - хорошее место для начала.

Самое простое регулярное выражение, которое вам, вероятно, нужно: r"^(\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d)\|.*McSend.*+b=(\d+)"

Первая группа позволит вам сравнить временную метку, а вторая даст значение.

import re

pattern =  r"^(\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d)\|.+McSend.+b=(\d+)"
#result is a list of tuples containing the time stamp and the value for b
result = re.findall(pattern, some_input) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...