在 python 中,如何在来自串行的每行输出中加入时间戳?



我想记录来自串行硬件的输出数据的时间戳。我可以为来自串行的第一个实例预先添加时间戳,但无法记录每一行。 例如: 现在,我可以记录时间戳,如下所示:


[2019-12-20 16:30:28] : $GV 0040

?国标

[2019-12-20 16:30:28] : $GB 00402eef

$GB 00403EEF

?国标

$GB 00402EEF

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


但是我想要每一行的时间戳。 如下所示:

[2019-12-20 16:30:28] : $GV 0040

[2019-12-20 16:30:28] : ?国标

[2019-12-20 16:30:28] : $GB 00402eef

[2019-12-20 16:30:28] : ?国标

[2019-12-20 16:30:28] : $GB 00402eef

[2019-12-20 16:30:28] : ?国标

[2019-12-20 16:30:28] : $GB 00402eef

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

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

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

如果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']

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

否则,有多个部分,因此我们检查第一个部分是否与正确的日期格式匹配。如果是这样,只需打印同一行(无更改(,并保存日期,以便在将来没有日期的行中使用。

最新更新