2017-09-08 21 views
0

我有兩個文件(舊的和當前的)。我在舊文件(olddata.txt)中存儲從客戶端接收的前一個值以及在cdata.txt中從客戶端接收的當前接收值。如何檢查兩個列表之間的差異,每個列表都有作爲列表成員的字典?

示例:在olddata.txt中:{「cdata」:[{「time」:「 14:14:20「,」cname「:」client1「,」sig「:」somedata「}]}

cdata.txt:{」cdata「:[{」time「:」14:14: 30「,」cname「:」client1「,」sig「:」somedata「},{」time「:」14:14:30「,」cname「:」client2「,」sig「:」somedata「}] }

它存儲爲JSON。

我想根據先前收到的時間戳和當前收到的時間戳找到客戶端響應的閾值(10秒)。

但問題是有些情況下最初發送了5個客戶端值,後來只發送了2個。在這種情況下,我想跟蹤前3個未發送值的客戶端(閾值)。此外,可能是從客戶端收到的新數據有6個客戶端值,以前只有3個已發送。 (AM模擬在一臺機器上的多個客戶端)

我嘗試這樣做:在cdatadata 爲外環: ccname = outloop.get( 「CNAME」) 的ctime = outloop.get( 「timC」) 在項目OLDDATA: ocname = item.get( 「CNAME」) otimC = item.get( 「timC」) 如果ccname == ocname: ........ ....

但它只檢查匹配的客戶端。

道歉,如果它的一個愚蠢的問題。我是新的python和字典列表。

回答

0

我會這樣處理。首先將您的數據放入一個結構中,以便爲每個客戶保存細節。例如

{ 
    "client1": { 
    "new": { 
     "cname": "client1", 
     "sig": "somedata", 
     "time": "14:14:30" 
    }, 
    "old": { 
     "cname": "client1", 
     "sig": "somedata", 
     "time": "14:14:20" 
    } 
    }, 
    "client2": { 
    "new": { 
     "cname": "client2", 
     "sig": "somedata", 
     "time": "14:14:30" 
    } 
    }, 
    "client3": { 
    "old": { 
     "cname": "client3", 
     "sig": "somedata", 
     "time": "14:14:20" 
    } 
    } 
} 

與腳本像

import json 
from collections import defaultdict 
oldnew = defaultdict(dict) 

with file('olddata.txt') as f: 
    for e in json.load(f)['cdata']: 
     oldnew[e['cname']]['old'] = e 

with file('cdata.txt') as f: 
    for e in json.load(f)['cdata']: 
     oldnew[e['cname']]['new'] = e 

print json.dumps(oldnew,indent=2) 

然後編寫邏輯來檢查每個客戶端的數據,並決定如何處理舊的和新的數據做。您可以通過只是讓報告像

client____ new_______ old_______ 
    client1 14:14:30 14:14:20 
    client2 14:14:30  None 
    client3  None 14:14:20 

下面類似的代碼

def val(d,*p): 
    for i in p: d = d.get(i,{}) 
    return None if d == {} else d 

print "client____ new_______ old_______" 
for cname, c in oldnew.items(): 
    otime, ntime = val(c,'old','time'), val(c,'new','time') 
    print "%(cname)10s %(ntime)10s %(otime)10s" % locals() 

然後改進它,直到你想要的邏輯很清楚,你開始。

相關問題