首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用Python解析10m10到10分10秒

如何用Python解析10m10到10分10秒
EN

Stack Overflow用户
提问于 2022-01-04 13:48:43
回答 1查看 60关注 0票数 0

因此,基本上,我有一个问题,已经困扰了我的时间。我要做的是像10m10s5d6w那样将时间解析为10分10秒6周5天(或1个月2周5天)。有快速的方法还是很好的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2022-01-04 14:12:04

假设格式总是带有标识符的<number><identifier>,如

代码语言:javascript
运行
复制
d   # day
s   # second
µs  # microsecond
ms  # millisecond
m   # minute
h   # hour
w   # week

您可以使用与datetime.timedelta耦合的regex

代码语言:javascript
运行
复制
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)

产出:

代码语言:javascript
运行
复制
datetime.timedelta(days=9, seconds=610, microseconds=8000)

注意:timedelta参数的顺序是:

代码语言:javascript
运行
复制
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

作为一种功能

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70579791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档