преобразование строки времени в секунды в Python

Мне нужно преобразовать строки значений времени, заданные в следующем формате, в секунды. Я используюpython2.6

например:

1.'00:00:00,000'  -> 0 seconds

2.'00:00:10,000'  -> 10 seconds

3.'00:01:04,000' -> 64 seconds

4. '01:01:09,000' -> 3669 seconds

Нужно ли использовать регулярные выражения для этого? Я пытался использовать модуль времени, ноtime.strptime('00:00:00,000','%I:%M:%S') бросил

ValueError: time data '00:00:00,000' does not match format '%I:%M:%S'

Может кто-нибудь сказать мне, как это можно решить?

Редактировать:

Я думаю

 pt =datetime.datetime.strptime(timestring,'%H:%M:%S,%f')
 total_seconds = pt.second+pt.minute*60+pt.hour*3600

дает правильное значение .. Я использовал неправильный модуль

 Josiah19 мая 2012 г., 10:54
Вам не нужно использоватьdatatime.datetime.strptime, time.strptime работает и для этого, его просто нет в документации по некоторым причинам ...

Ответы на вопрос(7)

import time
from datetime import datetime

t1 = datetime.now().replace(microsecond=0)
time.sleep(3)
now = datetime.now().replace(microsecond=0)
print((now - t1).total_seconds())

Решение Вопроса

>>> import datetime
>>> import time
>>> x = time.strptime('00:01:00,000'.split(',')[0],'%H:%M:%S')
>>> datetime.timedelta(hours=x.tm_hour,minutes=x.tm_min,seconds=x.tm_sec).total_seconds()
60.0

что вы готовы отбросить доли секунды ... проблема в том, что вы не можете использовать "00"; как час с%I

>>> time.strptime('00:00:00,000'.split(',')[0],'%H:%M:%S')
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
>>>

time = "01:34:11"
sum(x * int(t) for x, t in zip([3600, 60, 1], time.split(":"))) 
 02 мар. 2018 г., 23:33
Отличный ответ, небольшая настройка для корректной обработки форматов мм: сс и чч: мм: сс, просто поменяйте местами разделение.sum(x * int(t) for x, t in zip([1, 60, 3600], reversed(time.split(":"))))

timestr = '00:04:23'

ftr = [3600,60,1]

sum([a*b for a,b in zip(ftr, map(int,timestr.split(':')))])

Выход 263Sec.

Мне было бы интересно узнать, может ли кто-нибудь еще упростить это.

 05 окт. 2012 г., 06:57
Понимания списка более питонны. Такsum([a*b for a,b in zip(ftr, [int(i) for i in timestr.split(":")])]) было бы более питонным.
 12 окт. 2012 г., 08:44
Спасибо Le Vieux Gildas .. должно быть 263 .. ftr не должно было быть [3600,60,0] .. должно быть [3600,60,1] ... спасибо agian
 05 окт. 2012 г., 09:53
не должно ли это быть 263?

>>> import re
>>> ts = ['00:00:00,000', '00:00:10,000', '00:01:04,000', '01:01:09,000']
>>> for t in ts:
...     times = map(int, re.split(r"[:,]", t))
...     print t, times[0]*3600+times[1]*60+times[2]+times[3]/1000.
... 
00:00:0,0,000 0.0
00:00:10,000 10.0
00:01:04,000 64.0
01:01:09,000 3669.0
>>> 
 19 мая 2012 г., 11:56
Я ненавижу делать вещи вручную в Python: p

timedelta(), вы должны вычесть1900-01-01:

>>> from datetime import datetime
>>> datetime.strptime('01:01:09,000', '%H:%M:%S,%f')
datetime.datetime(1900, 1, 1, 1, 1, 9)
>>> td = datetime.strptime('01:01:09,000', '%H:%M:%S,%f') - datetime(1900,1,1)
>>> td
datetime.timedelta(0, 3669)
>>> td.total_seconds() # 2.7+
3669.0

%H Приведенное выше подразумевает, что ввод меньше дня, чтобы поддержать разницу во времени больше дня:

>>> import re
>>> from datetime import timedelta
>>> td = timedelta(**dict(zip("hours minutes seconds milliseconds".split(),
...                           map(int, re.findall('\d+', '31:01:09,000')))))
>>> td
datetime.timedelta(1, 25269)
>>> td.total_seconds()
111669.0

Подражать.total_seconds() на Python 2.6:

>>> from __future__ import division
>>> ((td.days * 86400 + td.seconds) * 10**6 + td.microseconds) / 10**6
111669.0

Ваш ответ на вопрос