Formatar tempo decorrido em hh:mm:ss.ff. (Python)

Formatar tempo decorrido em hh:mm:ss.ff. (Python)

Overview

Neste artigo descontraído, mas informativo, mergulhe na arte de medir e apresentar o tempo de execução de operações com Python. De um simples início a uma conclusão satisfatória, eu guiarei você através de cada etapa, tornando fácil capturar esses preciosos segundos, minutos e horas de forma legível. E não se preocupe, tem até um snippet no GitHub para facilitar ainda mais sua vida. Preparado para deixar de lado os prints confusos e abraçar a precisão? Vamos lá!

As vezes é bom medir o tempo decorrido em um operação, mas um simples print de um objeto time não é lá muito amigável. Neste post, vou mostrar como formatar em horas, minutos, segundos e milissegundos o tempo decorrido em uma operação.

Para realizarmos esta operação, precisaremos da função time(), que fica no pacote time:

from time import time

Agora precisamos das variáveis com o horário de inicio, o de conclusão e a diferença entre elas:

start = time()
# Operations...
end = time()
diff = end - start

O próximo passo é conseguir o número de horas:

hours, r = divmod(diff, 3600)

A função divmod retorna o resultado da divisão (hours) E o resto (r). Uma alternativa para este método seria fazer uma divisão e depois um mod (%), mas com esta função, economizamos um statement.

Apenas para exemplificar, a utilização da função divmod seria o equivalente a fazer isso:

hours = diff / 3600
r = diff % 3600

Neste ponto, já temos as horas. Agora precisamos dos minutos e segundos. Spoiler alert: Vamos utilizar a mesma lógica.

minutes, seconds = divmod(r, 60)

Para exibir no formato que desejamos, agora basta formatar a string:

print("{hours:0>2}:{minutes:0>2}:{seconds:05.3f}".format(hours=hours, minutes=minutes, seconds=seconds))

Para facilitar, fiz um snippet no GitHub com uma função que retorna a string já formatada.

Espero ter ajudado.