Schnellere Art, Zeitstring mit Python zu behandeln

Ich habe viele Log-Dateien mit dem Format wie:

2012-09-12 23:12:00 other logs here 

Und ich muss die Zeitzeichenfolge extrahieren und die Zeit delta zwischen zwei Protokolldatensätzen vergleichen. Das habe ich damit gemacht:

 for line in log: l = line.strip().split() timelist = [int(n) for n in re.split("[- :]", l[0]+' ' + l[1])] #now the timelist looks like [2012,9,12,23,12,0] 

Dann, als ich zwei Platten bekam

 d1 = datetime.datetime(timelist1[0], timelist1[1], timelist1[2], timelist1[3], timelist1[4], timelist1[5]) d2 = datetime.datetime(timelist2[0], timelist2[1], timelist2[2], timelist2[3], timelist2[4], timelist2[5]) delta = (d2-d1).seconds 

Das Problem ist, dass es langsam läuft, gibt es sowieso, um die Leistung zu verbessern? Vielen Dank im Voraus.

3 Solutions collect form web for “Schnellere Art, Zeitstring mit Python zu behandeln”

Sie könnten die Regex loswerden und die map :

 date_time = datetime.datetime for line in log: date, time = line.strip().split(' ', 2)[:2] timelist = map(int, date.split('-') + time.split(':')) d = date_time(*timelist) 
  • Ich glaube .split(' ', 2) wird schneller als nur .split() weil es nur bis zu zwei mal und nur auf Leerzeichen aufspaltet, nicht auf irgendwelchen Whitespace.
  • map(int, l) ist schneller als [int(x) for x in l] das letzte mal, das ich überprüft habe.
  • Wenn Sie können, loszuwerden .strip() .

Du könntest es ganz mit regulären Ausdrücken machen, was schneller sein könnte.

 find_time = re.compile("^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})") for line in log: timelist = find_time.match(line) if timelist: d = datetime.datetime(*map(int, timelist.groups())) 

Sie können auch ohne regexp versuchen, mit dem optionalen Argument von split

 (date, time, log) = line.split(" ", 2) timerecord = datetime.datetime.strptime(date+" "+time, "%Y-%m-%d %H:%M:%S") 

Und dann wäre es eine Frage der Berechnung Ihrer timedeltas zwischen aufeinanderfolgenden timerecord s

Python ist die beste Programmiersprache der Welt.