¿Cómo puedo mostrar timedelta en horas: min: seg?

Estoy exportando una lista de timedeltas a csv y los días realmente arruinan el formato. Intenté esto:

while time_list[count] > datetime.timedelta(days = 1): time_list[count] = (time_list[count] - datetime.timedelta(days = 1)) + datetime.timedelta(hours = 24) 

Pero se convierte instantáneamente de nuevo en días y crea un bucle infinito.

Por defecto, la conversión str() de un timedelta siempre incluirá la porción de days . Internamente, el valor siempre se normaliza como un número de días, segundos y microsegundos, no tiene sentido intentar “convertir” días a horas porque no se rastrea el componente de hora por separado.

Si desea formatear un objeto timedelta() diferente, puede hacerlo fácilmente de forma manual:

 def format_timedelta(td): minutes, seconds = divmod(td.seconds + td.days * 86400, 60) hours, minutes = divmod(minutes, 60) return '{:d}:{:02d}:{:02d}'.format(hours, minutes, seconds) 

Esto ignora cualquier porción de microsegundos, pero eso se agrega de forma trivial:

 return '{:d}:{:02d}:{:02d}.{:06d}'.format(hours, minutes, seconds, td.microseconds) 

Manifestación:

 >>> format_timedelta(timedelta(days=2, hours=10, minutes=20, seconds=3)) '58:20:03' >>> format_timedelta(timedelta(hours=10, minutes=20, seconds=3)) '10:20:03'