1. ホーム
  2. python

[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法

2022-07-26 22:39:06

質問

私は、文字列をパースして timedelta . ユーザは次のようなものを入力しなければなりません。 "32m" または "2h32m" あるいは "4:13" または "5hr34m56s" ... このようなことが既に実装されているライブラリなどはあるのでしょうか?

どのように解決するのですか?

最初のフォーマット ( 5hr34m56s ) の場合、正規表現を用いてパースする必要があります。

以下は、再ベースの解決策です。

import re
from datetime import timedelta


regex = re.compile(r'((?P<hours>\d+?)hr)?((?P<minutes>\d+?)m)?((?P<seconds>\d+?)s)?')


def parse_time(time_str):
    parts = regex.match(time_str)
    if not parts:
        return
    parts = parts.groupdict()
    time_params = {}
    for name, param in parts.items():
        if param:
            time_params[name] = int(param)
    return timedelta(**time_params)


>>> from parse_time import parse_time
>>> parse_time('12hr')
datetime.timedelta(0, 43200)
>>> parse_time('12hr5m10s')
datetime.timedelta(0, 43510)
>>> parse_time('12hr10s')
datetime.timedelta(0, 43210)
>>> parse_time('10s')
datetime.timedelta(0, 10)
>>>