Python Преобразование часов строки минут в минуты - PullRequest
0 голосов
/ 28 сентября 2019

Итак, скажем, у меня есть такой список:

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 час» на «60 минут», а затем удалить все нечисловые числа, но это не кажется идеальным.

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

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

Если кто-то знает лучший способ сделать это,с благодарностью.

Пожалуйста, дайте мне знать, если у вас есть еще вопросы.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Это довольно просто, просто кодировать без использования какого-либо специального синтаксического анализатора:

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 голос
/ 28 сентября 2019

В чистом питоне вы можете попробовать это:

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...