Python将字符串小时数转换成分钟数

问题描述 投票:0回答:2

所以说我有一个像这样的列表:

runtimes = ['24 min per ep',
     '1 hr 55 min',
     '24 min per ep',
     '25 min per ep',
     '23 min per ep',
     '23 min per ep',
     '23 min per ep',
     '27 min per ep',
     '24 min per ep',
     '23 min per ep',
     '24 min',
     '22 min per ep',
     '25 min per ep',
     '24 min per ep',
     '23 min per ep',
     '24 min per ep',
     '24 min per ep',
     '24 min per ep',
     '24 min per ep',
     '1 hr 41 min',
     '1 hr 27 min',
     '25 min per ep',
     '1 hr 22 min',
     '30 min per ep',
     '25 min per ep',
     '1 hr 31 min',
     '2 hr 4 min',
     '24 min per ep',
     '24 min per ep']

我想将这些值转换为纯粹的分钟数:

[我首先认为最好使用下面的两个正则表达式将“ 1 hr”替换为“ 60 min”,然后删除所有非数字,但这似乎并不理想。

re.sub("1 hr", "60 min", runtimes))

re.sub("\D", "", runtimes)

如果有人知道更好的方法,将不胜感激。

[如果您还有其他问题,请告诉我。

谢谢您的帮助。

python regex string time
2个回答
1
投票

这很简单,无需使用任何特殊类型的解析器即可进行编码:

def parse_runtime(runtime):
    mins = 0
    fields = runtime.split()
    for idx in range(0, len(fields)-2):
        if fields[idx+1] in ('min', 'mins', 'minutes'):
            mins += int(fields[idx])
        elif fields[idx+1] in ('hr', 'hrs', 'hours'):
            mins += int(fields[idx]) * 60

    return mins

runtime_mins = []
for runtime in runtimes:
    try:
        mins = parse_runtime(runtime)
        runtime_mins.append(mins)
    except ValueError:
        print('Bad runtime: ' + runtime)

print(runtime_mins)

1
投票

在纯python中,您可以尝试以下操作:

runtimes_min=[]
for r in runtimes:
    r=r.replace('per ep', '')
    hour = 0
    times = r.split('hr')
    if len(times) > 1:
        hour = times[0]
        minutes = times[1].split('min')[0]
    else:
        minutes=r.split('min')[0].rstrip()
    runtimes_min.append(f"{int(hour)*60 + int(minutes)} min per ep")

输出

['24 min per ep',
 '115 min per ep',
 '24 min per ep',
 '25 min per ep',
 '23 min per ep',
 '23 min per ep',
 '23 min per ep',
 '27 min per ep',
 '24 min per ep',
 '23 min per ep',
 '24 min per ep',
 '22 min per ep',
 '25 min per ep',
 '24 min per ep',
 '23 min per ep',
 '24 min per ep',
 '24 min per ep',
 '24 min per ep',
 '24 min per ep',
 '101 min per ep',
 '87 min per ep',
 '25 min per ep',
 '82 min per ep',
 '30 min per ep',
 '25 min per ep',
 '91 min per ep',
 '124 min per ep',
 '24 min per ep',
 '24 min per ep']
© www.soinside.com 2019 - 2024. All rights reserved.