ich beschäftige mich noch nicht allzulang mit Python und möchte mich eher als Anfänger bezeichnen.
Nun zu meiner Frage:
Ich habe mehrere Logdateien (jeweils mehrere 100 MB groß) mit einem Zeitstempel für jede Zeile
Datei 1 (Auszug):
12,2013-07-25 13:50:09,38.81,32.89,31.53,38.86,34.99,31.27,30.46,31.79,37.68,-51.28,
12,2013-07-25 14:00:09,38.37,31.83,31.18,38.08,31.39,30.24,29.57,29.72,37.08,-51.26,
12,2013-07-25 14:10:09,37.83,30.91,30.89,37.25,30.73,29.75,30.01,29.36,36.26,-51.29,
12,2013-07-25 14:20:09,37.52,30.34,30.55,36.69,30.66,29.44,30.32,29.1,35.66,-51.28,
12,2013-07-25 14:30:09,37.4,29.99,30.24,36.45,30.41,29.2,30.12,29.03,33.18,-51.26,
12,2013-07-25 14:40:09,37.17,30.05,30.2,36.12,30.15,29.09,29.96,28.95,31.01,-51.26,
....
Datei 2 (Auszug):
113,2013-07-25 14:25:06,4.459,3.03,.438,.941,78.8,59.97,8.37,-21.94,-5.19,-6.132,-8.14,-6.624,
113,2013-07-25 14:30:06,4.638,3.104,1.613,.214,-1.118,-2.372,8.4,-26.18,-6.254,-6.649,-6.649,
113,2013-07-25 14:35:06,5.046,3.495,1.963,.559,-.801,-2.087,8.4,-23.46,-9.48,-7.48,-7.2,-7.17,
113,2013-07-25 14:40:06,5.309,3.716,2.195,.741,-.633,-1.935,8.4,-19.2,-3.107,-5.743,-6.058,
113,2013-07-25 14:45:06,5.466,3.825,2.29,.821,-.55,-1.848,8.4,-18.93,-6.058,-6.649,-6.649,
113,2013-07-25 14:50:06,5.588,3.971,2.424,.961,-.445,-1.761,8.4,-24.04,-6.773,-6.773,-6.748,
....
Nun sollen beide Dateien miteinander verschnitten werden. Da der Zeitstempel nicht identisch ist, so muss nach der kleinsten Zeitabweichung gesucht werden. Anschließend sollen die Daten in Datei 2 um die in der Datei 1 gefundenen ehesten zeitlichen Übereinstimmung erweitert werden.
Die 1. und 2. Datei wird jeweils in 2 Listen gelesen
Code: Alles auswählen
FDR_data=[]
FDR_date=[]
S_date=[]
S_data=[]
FDR = open('FDR_test.dat',"r")
Simple = open('S_test.dat',"r")
csv_Sim = csv.reader(Simple)
for i in csv_Sim:
S_date.append(i[1])
S_data.append(i[2:])
csv_FDR = csv.reader(FDR)
for i in csv_FDR:
FDR_date.append(i[1])
FDR_data.append(i[2:])
Mein stümperhafter Ansatz:
Code: Alles auswählen
time_format = "%Y-%m-%d %H:%M:%S"
delta=[]
for x, y in [(x,y) for x in xrange(len(FDR_date)) for y in xrange(len(S_date))]:
delt1 = ((datetime.datetime.strptime(FDR_date[x], time_format) - datetime.datetime.strptime(S_date[y], time_format)))
delt2 = ((datetime.datetime.strptime(S_date[x], time_format) - datetime.datetime.strptime(FDR_date[y], time_format)))
delta.append(delt1.seconds + delt2.seconds)
if delt1.seconds > -60 and delt1.seconds < 60:
print "delt1", FDR_date[x], S_date[y], delt1.seconds
elif delt2.seconds > -60 and delt2.seconds < 60:
print "delt2", S_date[x], FDR_date[y], delt2.seconds
Code: Alles auswählen
delt2 2013-07-25 14:10:09 2013-07-25 14:10:06 3
delt2 2013-07-25 14:20:09 2013-07-25 14:20:06 3
delt2 2013-07-25 14:30:09 2013-07-25 14:30:06 3
delt2 2013-07-25 14:40:09 2013-07-25 14:40:06 3
delt2 2013-07-25 14:50:09 2013-07-25 14:50:06 3
delt2 2013-07-25 15:00:09 2013-07-25 15:00:06 3
delt2 2013-07-25 15:10:09 2013-07-25 15:10:06 3
delt2 2013-07-26 07:20:09 2013-07-25 07:20:06 3
So müste ich das für jeden Durchlauf von 2 neuen Dateien immer wieder neu definieren. Das geht bestimm auch einfacher zu beschreiben.
Gibt es vielleicht eine einfachere Möglichkeit eine zeitliche "Annäherung" der Zeitstempel zu finden?
So was in diese Richtung :
Suche den kleinsten (absolut gesehenen) delta.seconds und merge die Daten zusammen. Füge mir eine Spalte hinzu in der das delta.seconds ausgegeben wird, um die Qualität der Übereinstimmung später beurteilen zu können.
Vielen lieben Dank bereits im Voraus
**boletus**