python-3.x - 在python中,我如何为来自串行的每一行输出添加时间戳?
问题描述
我想记录来自串行硬件的输出数据的时间戳。我可以为来自串行的第一个实例添加时间戳,但不能为每一行记录。例如:现在,我可以记录时间戳,如下所示:
[2019-12-20 16:30:28]:$GV0040
?国标
[2019-12-20 16:30:28]:$GB00402eef
$GB00403eef
?国标
$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的每一行上记录输出数据时间戳的方法是什么?
解决方案
我认为您应该检查每一行是否以正确格式的时间码开头。如果没有,请根据之前的时间码添加。
如果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}')
将其分解,我们取每一行,并尝试将其拆分为' :'
. 原始行可能是以下任何类型:
?GB
['?GB']
分裂后变成?GB : other
['?GB', ' other']
分裂后变成[2019-12-20 16:30:28] : *AQ0401
['[2019-12-20 16:30:28]', '*AQ0401']
分裂后变成
如果有多个部分并且第一部分与日期格式不匹配或只有一个部分,请在该行前面加上正确的日期。
否则,有多个部分,因此我们检查第一个是否匹配正确的日期格式。如果是这样,只需打印同一行(不更改),并保存日期,以供以后没有日期的行使用。
推荐阅读
- json - 在 Haskell 中使用 Aeson 解析 JSON 配置文件
- python-3.x - IPython / Jupyter ...返回一个错误的解释器错误
- vb.net - 单击它时如何填充多边形?
- python - MemoryError,是否只是因为 ram 或嵌套
- wpf - WPF 更改 ListView 内容 (ContentPresenter) 突出显示颜色
- eclipse - 为什么在eclipse中安装SVN这么难?
- node.js - 如何从 Lambda NodeJS 发送 SES 电子邮件?
- orchardcms - Orchard CMS:启用或禁用的模块不起作用
- c - C中的递归。程序必须给出数组的最大元素
- boost - 如何将带有多参数的 cxxflag 传递给 boost.b2