Tiempo de conversión de Python h: m: sa segundos

Soy consciente de que con la función timedelta puede convertir segundos a h: m: s usando algo como:

>> import datetime >> str(datetime.timedelta(seconds=666)) '0:11:06' 

Pero necesito convertir h: m: sa segundos, o minutos.

¿Conoces una función que pueda hacer esto?

 def hms_to_seconds(t): h, m, s = [int(i) for i in t.split(':')] return 3600*h + 60*m + s 
 >>> import time, datetime >>> a = time.strptime("00:11:06", "%H:%M:%S") >>> datetime.timedelta(hours=a.tm_hour, minutes=a.tm_min, seconds=a.tm_sec).seconds 666 

Y aquí hay un descarado si realmente estás decidido a dividir sobre “:”

 >>> s = "00:11:06" >>> sum(int(i) * 60**index for index, i in enumerate(s.split(":")[::-1])) 666 

Desafortunadamente, no es tan trivial como construir un objeto datetime partir de una cadena usando datetime.strptime . Esta pregunta se hizo anteriormente en Stack Overflow aquí: Cómo construir un objeto timedelta a partir de una cadena simple , donde la solución involucraba el uso de python-dateutil .

Alternativamente, si no quieres tener que agregar otro módulo, aquí hay una clase que puedes usar para analizar un timedelta de una cadena: http://kbyanc.blogspot.ca/2007/08/python-reconstructing-timedeltas- from.html

 >>> def tt(a): ... b = a.split(':') ... return int(b[0]) * 3600 + int(b[1]) * 60 + int(b[2]) ... >>> print tt('0:11:06') 

666

Esto funciona en 2.6.4:

 hours, minutes, seconds = [int(_) for _ in thestring.split(':')] 

Si quieres volver a convertirlo en un timedelta:

 thetimedelta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds) 

Ni siquiera estoy seguro de molestarme con timedelta por esto

 >>> pseconds = lambda hms:sum(map(lambda a,b: int(a)*b,hms.split(':'),(3600,60,1))) >>> pseconds('0:11:06') 666