Hallo,
ich habe ein ziemlich grosses Logfile mit 2 Spalten. In der ersten steht die runID und in der zweiten die Zeit. Für jeden User wurde ein Eintrag mit runID und Zeit erstellt. Nun möchte ich auswerten, wie die durchschnittliche Zeit pro runID ist. Ich habe schon mit Listen und Sets herumprobiert, aber irgendwie komme ich auf keine Lösung.
Hat wer Ideen wie ich die durchschnittliche Zeit pro runID berechnen kann?!?
Hier noch ein Beispiel meines Logfiles:
201, 26
200, 27
301, 13
300, 17
401, 21
400, 19
201, 28
200, 29
301, 10
300, 11
401, 26
400, 20
201, 35
200, 35
Der Frosch dank im Voraus!
Auswertung
Also, im Prinzip ist das ja schon ein No-Brainer.
Mal eben so runter geschrieben:
Ps.: mein 'Code' macht sehr viele Annahmen über das Format der log.txt. Du solltest da noch Fehlerbehandlung etc. einbauen.
Mal eben so runter geschrieben:
Code: Alles auswählen
d = dict()
with open('log.txt', 'r') as l:
for line in l:
runID, runTime = line.split(',')
if d.has_key(runID):
d[runID].append(int(runTime.strip()))
else:
d[runID] = [int(runTime.strip())]
for key, value in d.items():
print "{0}: {1}".format(key, sum(value)/len(value))
@.robert: Wenn das Log wirklich gross ist, dann könnte man das Aufsummieren schon beim Einlesen erledigen um Speicher zu sparen.
Code: Alles auswählen
from collections import defaultdict
class Averager(object):
def __init__(self):
self.total = 0
self.count = 0
def __float__(self):
return float(self.total) / self.count
def __iadd__(self, other):
self.total += other
self.count += 1
return self
def main():
result = defaultdict(Averager)
with open('test.log') as lines:
for line in lines:
run_id, run_time = map(int, line.split(','))
result[run_id] += run_time
for key, value in sorted(result.iteritems()):
print '%d: %f' % (key, value)
if __name__ == '__main__':
main()
Manchmal sieht man den Wald vor lauter Bäumen nicht.
Ich habe eindeutig viel zu kompliziert gedacht. Eure Lösungen sind ja genial einfach und ich brauch nicht x-Listen und zu einem Ergebnis zu kommen. Man lernt nie aus!!
Der FROSCH dank!
Ich habe eindeutig viel zu kompliziert gedacht. Eure Lösungen sind ja genial einfach und ich brauch nicht x-Listen und zu einem Ergebnis zu kommen. Man lernt nie aus!!
Der FROSCH dank!