我目前正在开发一个Python项目(不得不自学Python,目前还在学习),它从我提供的csv文件中获取数据。
我目前仍然坚持如何遍历列表以将字符串从“2小时5分15秒”等列表转换为小数并将其另存为另一个列表/数组。
我知道H:M:S,但在列表的某些区域,它只是“8分4秒”,所以它从一小时计数到只有几分钟和几秒钟不等。
答案 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]