Как рассчитать средние отметки времени datetime в python3 - PullRequest
0 голосов
/ 09 мая 2020

У меня есть код с отметкой времени производительности, и я хочу измерить среднее время, которое потребовалось для его запуска на нескольких компьютерах, но я просто не могу понять, как использовать модуль datetime в python .

Вот как выглядит моя процедура:

1) У меня есть код, который просто записывает в текстовый файл журнал, где метка времени выглядит как

t1=datetime.datetime.now()
...
t2=datetime.datetime.now()
stamp= t2-t1

И эта переменная stamp просто записана, скажем, log.txt, поэтому в файле журнала она выглядит как 0:07:23.160896, поэтому кажется, что это формат %H:%M:%S.%f.

2) Затем я запускаю второй python сценарий, который читает файл log.txt и считывает значение 0:07:23.160896 в виде строки.

Проблема в том, что я не знаю, как работать с этим значением, потому что, если я импортирую его как datetime, оно также добавит к нему воображаемый год, месяц и день, чего я не хочу, я просто хочу работать с часами, минутами, секундами и микросекундами, чтобы сложить их или сделать среднее.

Например, я могу просто открыть его в Libreoffice и добавить 0:07:23.160896 к 0:00:48.065130, что даст 0:08:11.226026, а затем просто разделите на 2, что даст 0:04:05.613013, и я просто не могу сделать это в python или я не знаю, как это сделать.

Я пробовал все, но ни datetime.datetime, ни datetime.timedelta не допускают такого простого умножения и деления. Если я просто сделаю y=datetime.datetime.strptime('0:07:23.160896','%H:%M:%S.%f'), он просто выдаст 1900-01-01 00:07:23.160896, и я не могу просто взять y*2 в таком виде, он не позволяет выполнять арифметические операции c, плюс, если я конвертирую его в timedelta, он будет также умножьте год, что смешно. Я просто хочу сложить, вычесть и умножить время.

Пожалуйста, помогите мне найти способ сделать это, и не только для двух переменных, но, возможно, даже способ вычислить среднее значение для всего списка временных меток, например средний (['0: 07: 23.160896', '0: 00: 48.065130', '0: 00: 14.517086', ...]) способ.

Мне просто нужен способ вычислить среднее многих временных меток и выдать среднее значение в том же формате, точно так же, как вы можете просто выбрать столбец в Libreoffice и воспользоваться функцией AVERAGE (), которая выдаст среднюю временную метку в этом столбце.

1 Ответ

0 голосов
/ 14 мая 2020

Как и вы, вы сначала считываете строку в объект datetime, используя strptime: t = datetime.datetime.strptime(single_time,'%H:%M:%S.%f')

После этого преобразуйте временную часть вашей строки даты в timedelta, чтобы вы могли легко вычислить с помощью раз: tdelta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond)

Теперь вы можете легко вычислить с помощью объекта timedelta и преобразовать в конце вычислений обратно в строку str(tdsum)

import datetime

times = ['0:07:23.160896', '0:00:48.065130', '0:12:22.324251']

# convert times in iso-format into timedelta list
tsum = datetime.timedelta()
count = 0
for single_time in times:
    t = datetime.datetime.strptime(single_time,'%H:%M:%S.%f')
    tdelta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond)
    tsum = tsum + tdelta
    count = count + 1

taverage = tsum / count

average_time = str(taverage)
print(average_time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...