【问题标题】:Python Converting String Hours Minutes to MinutesPython将字符串小时分钟转换为分钟
【发布时间】:2020-01-28 04:20:21
【问题描述】:

假设我有一个这样的列表:

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 时间处理”,您会发现可以比我们在此处管理的更好地解释这一点的参考资料。您将需要 datetime 模块,也许还需要一个简单的输入解析器。

标签: python regex string time


【解决方案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)

【讨论】:

  • 这不应该说 idx in range(0, len(fields)-1) 而不是 -2?
  • @sums22,不,然后idx+1 将在最后一次迭代中从头开始。
【解决方案2】:

在纯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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2019-01-05
    • 2014-12-01
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多