【问题标题】:In python, how can i Prepending a timestamp to each line of output coming from serial?在python中,我如何为来自串行的每一行输出添加时间戳?
【发布时间】:2020-04-13 00:06:10
【问题描述】:

我想记录来自串行硬件的输出数据的时间戳。我可以为来自串行的第一个实例添加时间戳,但不能为每一行记录。 例如: 现在,我可以按如下方式记录时间戳:


[2019-12-20 16:30:28] : $GV0040

?GB

[2019-12-20 16:30:28] : $GB00402eef

$GB00403eef

?GB

$GB00402eef

[2019-12-20 16:30:28]:*AQ0401


但我希望每行都有时间戳。如下:

[2019-12-20 16:30:28] : $GV0040

[2019-12-20 16:30:28] : ?GB

[2019-12-20 16:30:28] : $GB00402eef

[2019-12-20 16:30:28] : ?GB

[2019-12-20 16:30:28] : $GB00402eef

[2019-12-20 16:30:28] : ?GB

[2019-12-20 16:30:28] : $GB00402eef

[2019-12-20 16:30:28]:*AQ0401

在python的每一行上记录输出数据时间戳的方法是什么?

【问题讨论】:

    标签: python-3.x timestamp


    【解决方案1】:

    我认为您应该检查每一行是否以正确格式的时间码开头。如果没有,请根据之前的时间码添加。

    如果lines 是一个生成器或包含串行的每一行的东西,你可以这样做。

    from datetime import datetime
    
    last_timecode = datetime.now()
    time_format = '[%Y-%m-%d %H:%M:%S]'
    for line in lines:
        parts = line.split(' :')
        if len(parts) > 1:
            try:
                datetime.strptime(parts[0], time_format)
                last_timecode = parts[0]
                print(line)
            except ValueError:
                print(f'{last_timecode} : {line}')
        else:
            print(f'{last_timecode} : {line}')
    

    分解后,我们取出每一行,并尝试将其拆分为' :'。原始行可能是以下任何一种类型:

    1. ?GB拆分后变成['?GB']
    2. ?GB : other拆分后变成['?GB', ' other']
    3. [2019-12-20 16:30:28] : *AQ0401拆分后变成['[2019-12-20 16:30:28]', '*AQ0401']

    如果有多个部分且第一部分与日期格式不匹配或只有一个部分,请在行前添加正确的日期。

    否则,有多个部分,所以我们检查第一个是否匹配正确的日期格式。如果是这样,只需打印同一行(不做任何更改),并保存日期,以供以后没有日期的行使用。

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多