[英]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.040000
的timestamp
替換為以下示例:
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()
然后,您可以根據新method
或lmabda
函數返回的timestamp
數據對list
進行sort
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.