2017-09-08 8 views
0

私は2つのファイル(古いものと現在のもの)を持っています。古いファイル(olddata.txt)にクライアントから受け取った以前の値と、cdata.txtにあるクライアントからの現在の受信値を格納します。リストのメンバーとして辞書を持つ2つのリストの違いを調べるにはどうすればよいですか?

例:olddata.txt内の{{"cdata":{"time": " cdata.txt内の{{"time": "14:14:20"、 "cname": "client1"、 "sig": "somedata"}}}

「time」:「14:14:30」、「cname」:「client2」、「sig」:「somedata」}]、「cname」:「client1」、「sig」:「somedata」} }

JSONとして保存されています。

私は、前回受信したタイムスタンプと現在受信したタイムスタンプに基づいてクライアントからの応答のためのしきい値(10秒)を見つけようとしています。

しかし、問題は、最初に5つのクライアント値が送信され、後で2つだけのインスタンスがあるということです。そのような場合、値を送信しなかった前の3つのクライアント(しきい値)を把握したいと思います。また、クライアントから受信した新しいデータに6つのクライアント値があり、それ以前に3つだけが送信された場合もあります。内のアイテムの ccname = outloop.get( "CNAME") CTIME = outloop.get( "TIMC") :cdatadataにoutloopため :私はこの試み

を(AMは、単一のマシン上で複数のクライアントをシミュレートします) 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) 

のように、各クライアントのデータを調べ、古いものと新しいデータで何をすべきかを決定するためのロジックを記述します。あなたはちょうどあなたがしたいロジックはあなたに透明になるまで、それを改善する

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

のようなコードで

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

ようなレポートを作成することから始めることができます。

関連する問題