Первый шаг - разобрать все эти временные метки во что-то, над чем вы можете выполнять арифметику.Это могут быть timedelta
объекты или целые микросекунды (или миллисекунды, поскольку у вас все время имеют 0 микро), или числа с плавающей запятой, или любой другой разумный тип.
Например, если предположитьэти входные данные представляют собой одну большую строку:
ts = []
for h, m, s, u in re.findall(r'(\d+):(\d+):(\d+)(?:\.(\d+))?', bigstring):
h, m, s = int(h), int(m), int(s)
u = int(u) if u else 0
ts.append(datetime.timedelta(hours=h, minutes=m, seconds=s, microseconds=u))
Если это список строк или файловый объект и т. д., просто измените его, чтобы выполнить итерацию, и выполните re.search
для каждой из них, вместо итерации re.findall
.
Тогда мы можем усреднить их так же, как и любые другие значения:
sum(ts, datetime.timedelta()) / len(ts)
Поскольку я использовал timedelta
значений, результат будет таким:
datetime.timedelta(0, 0, 659333)
… или, если вы print
это:
0:00:00.659333
… или, если хотите, скажем, за несколько секунд, просто вызовите его метод total_seconds()
:
0.659333