2017-04-12 21 views
0

私は時系列で下のデータを並べ替え、タイムスタンプに基づいてデータをリストする作業があります。イベントとデータを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] 
+0

ファイルを '読み込み '、'タイムスタンプ '、'イベント名 '、'データフィールド 'ならば'各行 '、' check'を見つけることができます。そうであれば、特定の 'list'(各変数のリスト:' list_timestamp'、 'list_event_name'、' list_datafields')に 'append'して、作成したリストを' zip'して 'sort'します'timestamp'で圧縮されたリスト。このすべての処理の後、 'forループ'を使ってファイルレイアウトを再作成することができます。一方、 '.format()'で各変数を 'print'します。 –

答えて

0

が、これはあなたがあなたのファイルをreadし、それをロードするために必要なファイル

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

であると想像することができますint o、たとえばlistです。次に、UTCタイムゾーンに表されるTimeStampの最初の値フィールドを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を使用することができます。

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

2017-02-13 12:07:25.040000は、この例のようにdatetimeモジュールを使用してtimestamp置き換えることができる含まれていこのように機能します:

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

methodまたはlmabdaの機能がtimestamptimestampのデータで返信された場合はsortlistに送信することができます。

関連する問題