2016-08-15 58 views
1

我正在嘗試搜索CSV文件的重複設備名稱的行。輸出應記錄第一個匹配行的日期,並記錄最後一行的日期。我需要一些關於從CSV文件中刪除重複設備名稱的邏輯的幫助,同時還要記錄設備首次和最後一次出現的時間。搜索CSV的匹配字段,並使用初始日期

import time as epoch 

# AlertTime, DeviceName, Status 
Input = [['14/08/2016 13:00', 'device-A', 'UP'], ['14/08/2016 13:15', 'device-B', 'DOWN'], ['15/08/2016 17:30', 'device-A', 'UP']] 

# FirstSeen, LastSeen, DeviceName, Status 
Output = [] 

# Last 48 hours 
now = epoch.time() 
cutoff = now - (172800) 

for i in Input: 
    AlertTime = epoch.mktime(epoch.strptime(i[0], '%d/%m/%Y %H:%M')) 
    if AlertTime > cutoff: 
     Result = [i[0], i[0], i[1], i[2]] 
     Output.append(Result) 

print(Output) 

輸出(3項):

[['14/08/2016 13:00', '14/08/2016 13:00', 'device-A', 'UP'], ['14/08/2016 13:15', '14/08/2016 13:15', 'device-B', 'DOWN'], ['15/08/2016 17:30', '15/08/2016 17:30', 'device-A', 'UP']] 

通緝輸出(2項):

[['14/08/2016 13:15', '14/08/2016 13:15', 'device-B', 'DOWN'], ['14/08/2016 13:00', '15/08/2016 17:30', 'device-A', 'UP']] 
+1

用'device'關鍵和'(FirstSeen,LastSeen,設備名稱使用字典,狀態)'作爲價值。 –

+0

@VedangMehta也許你可以省略'DeviceName'字段,因爲它已經是關鍵了?否則,我完全同意。 – bdvll

+0

@bdvll你是完全正確的。 –

回答

1

您可以使用OrderedDict來保存在CSV文件中看到設備的順序。字典用於自動刪除重複項。

以下工作通過嘗試更新現有字典條目(如果它尚不存在),Python生成KeyError異常。在這種情況下,可以添加具有相同開始和結束警報時間的新條目。更新條目時,使用現有的first_seen更新最新發現的條目alert_timestatus。最後,該字典進行解析,以創建所需的輸出格式:

from collections import OrderedDict 

# AlertTime, DeviceName, Status 
input_data = [['14/08/2016 13:00', 'device-A', 'UP'], ['14/08/2016 13:15', 'device-B', 'DOWN'], ['15/08/2016 17:30', 'device-A', 'UP']] 

entries = OrderedDict() 

for alert_time, device_name, status in input_data: 
    try: 
     entries[device_name] = [entries[device_name][0], alert_time, status] 
    except KeyError as e: 
     entries[device_name] = [alert_time, alert_time, status] 

# Convert the dictionary of entries into the required format   
output_data = [[device_name, first_seen, last_seen, status] for device_name, [first_seen, last_seen, status] in entries.items()] 

print(output_data) 

給你作爲輸出:

[['device-A', '14/08/2016 13:00', '15/08/2016 17:30', 'UP'], ['device-B', '14/08/2016 13:15', '14/08/2016 13:15', 'DOWN']] 
+0

感謝Martin,感謝您的幫助。我最終使用了你的方法。 – zeepi

1

由於Vedang梅塔在評論中說,你可以使用字典存儲數據。

my_dict = {} 
    for i in Input: 
     AlertTime = epoch.mktime(epoch.strptime(i[0], '%d/%m/%Y %H:%M')) 
     if AlertTime > cutoff: 
      #if we have seen this device before, update it 
      if i[1] in my_dict: 
       my_dict[i[1]] = (my_dict[i[1]][0], i[0], i[2]) 
      #if we haven't seen it, add it 
      else: 
       my_dict[i[1]] = (i[0],i[0],i[2]) 

在此之後,所有的設備都將存儲在my_dict含(first_seenlast_seenstatus)。

+0

感謝bvvll爲您的努力 – zeepi