Python:将“ - hrs - min - sec”字符串更改为小数分钟

时间:2016-05-27 03:53:19

标签: python list csv time

我目前正在开发一个Python项目(不得不自学Python,目前还在学习),它从我提供的csv文件中获取数据。

我目前仍然坚持如何遍历列表以将字符串从“2小时5分15秒”等列表转换为小数并将其另存为另一个列表/数组。

我知道H:M:S,但在列表的某些区域,它只是“8分4秒”,所以它从一小时计数到只有几分钟和几秒钟不等。

3 个答案:

答案 0 :(得分:4)

功能:

def hms_to_mins(t):
    h, m, s = [int(i) for i in t.split(' ')]
    return float(60*h + m + (s/60))

hms_to_mins('5 30 0')

输出:330.0

您可以添加更多内容来验证输入和输入检查是否有3个输入(小时,分钟和秒)。

如果你想输入“5小时30分2秒”并运行,在上面的代码中只使用它(而不是hms_to_mins('5 30 0')):

import re
t=' '.join(re.findall('\d+', s))
hms_to_mins(t)

代码如下:

import re

def hms_to_mins(t):
    h, m, s = [int(i) for i in t.split(' ')]
    return float(60*h + m + (s/60))

s='5hrs3mins0sec'  //your time string
t=(re.findall('\d+', s))
while(len(t)<3): t.append(str(0))
t=' '.join(t)

hms_to_mins(t)

输出:303.0

答案 1 :(得分:1)

有多个选项可以解析这些时间字符串。这是一种方法(可能不是最简短的方法,但很容易理解) - 使用time.strptime()通过试验和错误使用3种不同格式加载时间字符串:

import time
from datetime import timedelta


def get_seconds(item):
    try:
        x = time.strptime(item, '%H hrs %M min %S sec')
    except ValueError:
        try:
            x = time.strptime(item, '%M min %S sec')
        except ValueError:
            x = time.strptime(item, '%S sec')
    return timedelta(hours=x.tm_hour, minutes=x.tm_min, seconds=x.tm_sec).total_seconds()

l = [
    "2 hrs 5 min 15 sec",
    "8 min 4 sec",
    "2 sec"
]

for item in l:
    print(get_seconds(item))

打印每个时间字符串的总秒数:

7515.0
484.0
2.0

答案 2 :(得分:1)

def str2dig(s):
      nline = s.split(' ')
      if len(nline) == 6:
          minutes = int(nline[0])*60+int(nline[2])+ float(nline[4])/60
      elif len(nline) == 4:
          minutes = int(nline[0]) + float(nline[2])/60
      else:
          minutes = float(nline[0])/60
      return round(minutes,2)


s = '2 hrs 5 min 15 sec'
print str2dig(s)
s = '8 min 4 sec'
print str2dig(s)

ll      = ['2 hrs 5 min 15 sec', '8 min 4 sec']
newtime = [ str2dig(s) for s in ll ]  
print newtime
#[125.25, 8.07]