因此,基本上,我有一个问题,已经困扰了我的时间。我要做的是像10m10s
或5d6w
那样将时间解析为10分10秒6周5天(或1个月2周5天)。有快速的方法还是很好的解决方案?
发布于 2022-01-04 14:12:04
假设格式总是带有标识符的<number><identifier>
,如
d # day
s # second
µs # microsecond
ms # millisecond
m # minute
h # hour
w # week
您可以使用与datetime.timedelta
耦合的regex
import re
from datetime import timedelta
s1 = '10m10s1d1w1d8ms'
# extract the parameters in order of `timedelta`
reg = re.compile(r'(\d+)d|(\d+)s|(\d+)µs|(\d+)ms|(\d+)m|(\d+)h|(\d+)w')
# sum the identical units to form a single list
params = [sum(int(e) for e in t if e) for t in zip(*reg.findall(s1))]
# create a timedelta object
t = timedelta(*params)
产出:
datetime.timedelta(days=9, seconds=610, microseconds=8000)
注意:timedelta参数的顺序是:
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
作为一种功能
def str_to_tdelta(s):
import re
from datetime import timedelta
reg = re.compile(r'(\d+)d|(\d+)s|(\d+)µs|(\d+)ms|(\d+)m|(\d+)h|(\d+)w')
params = [sum(int(e) for e in t if e) for t in zip(*reg.findall(s))]
return timedelta(*params)
str_to_tdelta('5d6w')
# datetime.timedelta(days=47)
https://stackoverflow.com/questions/70579791
复制相似问题