簡體   English   中英

如何在Python中按時間順序排列事件和數據

[英]How to arrange events and data in chronological order in python

我的任務是按時間順序整理以下數據,並根據時間戳列出數據。

如果有人可以指導我理解邏輯,我可以嘗試自己編寫代碼。

輸入:

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]

讓我們想象這在文件中

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'])

您需要read文件並將其加載到例如list 然后將表示為UTC時區的TimeStamp的第一個值字段轉換為timestamp

例如:

Timestamp         : 2017-02-13 12:07:25.040000 UTC

可以使用datetime模塊將包含2017-02-13 12:07:25.040000timestamp替換為以下示例:

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()

然后,您可以根據新methodlmabda函數返回的timestamp數據對list進行sort

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM