我的任务是按时间顺序整理以下数据,并根据时间戳列出数据。
如果有人能引导我通过逻辑,我可以尝试自己写代码。
输入:
Timestamp : 2017-02-13 12:07:25.040000 UTC
Event Name : linkManager/link-event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X reason:Port Down]
Timestamp : 2017-02-13 12:07:26.040000 UTC
Event Name : eventManager/event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X, reason:Port Down]
Timestamp : 2017-02-13 12:07:25.040000 UTC
Event Name : linkManager/link-event
DataFields : [srcSwName:X, srcPortName:ethernet29, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X reason:Port Down]
Timestamp : 2017-02-13 12:07:26.040000 UTC
Event Name : eventManager/event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X, reason:Port Down]
Timestamp : 2017-02-13 12:07:25.040000 UTC
Event Name : eventManager/event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X, reason:Port Down]预期输出:
Timestamp : 2017-02-13 12:07:25.040000 UTC
Event Name : linkManager/link-event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X reason:Port Down]
Timestamp : 2017-02-13 12:07:25.040000 UTC
Event Name : linkManager/link-event
DataFields : [srcSwName:X, srcPortName:ethernet29, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X reason:Port Down]
Timestamp : 2017-02-13 12:07:25.040000 UTC
Event Name : eventManager/event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X, reason:Port Down]
Timestamp : 2017-02-13 12:07:26.040000 UTC
Event Name : eventManager/event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X, reason:Port Down]
Timestamp : 2017-02-13 12:07:26.040000 UTC
Event Name : eventManager/event
DataFields : [srcSwName:X, srcPortName:ethernet30, dstSwName:X, dstPortName:ethernet3, fabricLinkEventType:X, reason:Port Down]发布于 2017-04-12 14:57:10
让我们想象一下这是在一个文件中
import itertools
with open('filename') as f:
# Extract blocks by splitting on empty lines
blocks = [list(val) for key, val in
itertools.groupby(f, lambda x: bool(x.rstrip()))
if key]
# Now the top line on each block has a timestamp so compare it:
blocks.sort(key=lambda x: x[0].split(':')[-1])
with open('out_file', 'w') as f:
# Write back the blocks with a new line separator to new file:
for block in blocks:
f.writelines(block + ['\n'])发布于 2017-04-12 15:05:39
您需要对文件进行read并将其加载到例如list中。然后将表示为TimeStamp的UTC时区的第一个值字段转换为timestamp。
例如:
Timestamp : 2017-02-13 12:07:25.040000 UTC包含2017-02-13 12:07:25.040000的timestamp可以使用datetime模块替换,如下例所示:
from datetime import datetime
a = '2017-02-13 12:07:25.040000'
b = datetime.datetime.strptime(a, "%Y-%m-%d %H:%M:%S.%f").timestamp()
print(b)
>>> 1486984045.04现在,您可以创建一个method,也可以像这样简单地使用lambda函数:
# Note: x should be a string
get_timestamp = lambda x: datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S.%f").timestamp()然后,您可以通过新的sort或lmabda函数的返回的timestamp数据来实现list。
https://stackoverflow.com/questions/43372413
复制相似问题