首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中按时间顺序排列事件和数据

如何在python中按时间顺序排列事件和数据
EN

Stack Overflow用户
提问于 2017-04-12 14:26:36
回答 2查看 1.7K关注 0票数 0

我的任务是按时间顺序整理以下数据,并根据时间戳列出数据。

如果有人能引导我通过逻辑,我可以尝试自己写代码。

输入:

代码语言:javascript
复制
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]

预期输出:

代码语言:javascript
复制
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]
EN

回答 2

Stack Overflow用户

发布于 2017-04-12 14:57:10

让我们想象一下这是在一个文件中

代码语言:javascript
复制
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'])
票数 0
EN

Stack Overflow用户

发布于 2017-04-12 15:05:39

您需要对文件进行read并将其加载到例如list中。然后将表示为TimeStampUTC时区的第一个值字段转换为timestamp

例如:

代码语言:javascript
复制
Timestamp         : 2017-02-13 12:07:25.040000 UTC

包含2017-02-13 12:07:25.040000timestamp可以使用datetime模块替换,如下例所示:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
# Note: x should be a string
get_timestamp = lambda x: datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S.%f").timestamp()

然后,您可以通过新的sortlmabda函数的返回的timestamp数据来实现list

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43372413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档