2012-04-30 3 views
0

Предположим, у меня есть строка, такая как '2:19.83 blah blah...blah blah', где формат minutes:seconds.centiseconds blah... и blah может представлять любую последовательность символов, отличную от новой строки.Python: Истекшее время анализа (минуты: секунды) до секунд

Я хочу проанализировать и получить количество секунд округленных вниз. Таким образом, в приведенном выше примере результатом будет 139.

Каков наилучший способ для этого?

ответ

4

Я бы сначала получить временную часть из строки

>>> newstring=s.split('.',1)[0] 

Тогда я прочитал его с помощью strptime ...

>>> tt=time.strptime(newstring,"%M:%S") 

, а затем, наконец, получить время в секундах ,

>>> tt.tm_min * 60 + tt.tm_sec 

Не 1-лайнер, но довольно просто ...

+1

это должно быть: 'tt = time.strptime (s, '% M:% S')',% m - месяцы,% s недопустимо – Boud

+0

@Boud - Спасибо. Это то, что я получаю от того, чтобы не внимательно смотреть на коды формата. – mgilson

2
sum(x*y for x,y in zip(map(int, re.findall(r'^(\d+):(\d+)', string)[0]), [60,1])) 
+0

+1 некрасивым, но функциональный один вкладыш. – Muhd

1

Это, кажется, делать то, что вам нужно:

>>> s = '2:19.83 blah blah...blah blah' 
>>> import re 
>>> m = re.match(r'(?P<min>\d):(?P<sec>\d{2})\.\d+', s) 
>>> if m: 
...  seconds = (int(m.group('min')) * 60) + int(m.group('sec')) 
...  print seconds 
139 
+0

Это дает мне ошибку травления с использованием оболочки python по адресу http://shell.appspot.com/ – Muhd

+0

Ну, как вы можете видеть, она работает в моей оболочке Python 2.7. Это копия/вставка. Я не могу объяснить вашу ошибку травления. – alan

+0

Возможно, проблема с python 2.5 ... Я посмотрю на нее в своей оболочке на своем домашнем компьютере, когда у меня появится такая возможность. – Muhd

2

Как насчет этого? Не особенно красиво, может быть, я признаю, но функционально и легко понять, я думаю.

Учитывая

s = '2:19.83' 

и

tmp = s.split(':') 
min = int(tmp[0]) 
sec = int(tmp[1].split('.')[0]) 

total_secs = min * 60 + sec 
print total_secs 

дает

139 
+1

Я думаю, что это красивее, чем регулярное выражение ... regex отлично, но это слишком сложно в такой ситуации (и трудно читать). – mgilson

+0

Извините за комментарий Me-Too, но так как я предложил решение regex, я имею право сказать: «Вы правы!» Мне тоже это нравится. +1 – alan

+0

Спасибо .. мои ограниченные знания часто приводят меня к «Простой лучше, чем сложный». решения :) – Levon