【问题标题】:How to parse this log to get date/time out for plotting with Python3如何解析此日志以获取使用 Python3 绘图的日期/超时
【发布时间】:2019-07-14 15:16:48
【问题描述】:

我有一个如下所示的日志:

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

我用splitjoin 尝试了一些体操,但这对我来说并没有真正奏效......我最终想绘制类似于this 的问题,可能(我猜) 带有一个 numpy 数组:

【问题讨论】:

    标签: python numpy datetime parsing timestamp


    【解决方案1】:

    编辑:更新了问题,因为我刚刚意识到您正在尝试使用 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
    

    【讨论】:

    • 这行得通,但数据已经被解析...每个条目看起来像示例数据中显示的内容。我需要将日期和 fixCount 放入 2xN numpy 数组
    • 嗯,所以你想把解析后的数据变成图表?
    【解决方案2】:

    假设日志文件名为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
    

    【讨论】:

    • 这是假设日志中行的长度永远不会改变。
    • 你是对的。它基于您提交的示例。如果不是这种情况,请添加更多详细信息
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多