如何从一个简单的字符串构造一个 timedelta 对象 [英] How to construct a timedelta object from a simple string

查看:27
本文介绍了如何从一个简单的字符串构造一个 timedelta 对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个需要将字符串解析为 timedelta 的函数.用户必须输入类似 "32m""2h32m",甚至 "4:13"";5hr34m56s"... 有没有图书馆或已经实现了这种东西的东西?

I'm writing a function that needs to parse string to a timedelta. The user must enter something like "32m" or "2h32m", or even "4:13" or "5hr34m56s"... Is there a library or something that has this sort of thing already implemented?

推荐答案

对于第一种格式(5hr34m56s),你应该使用正则表达式解析

For the first format (5hr34m56s), you should parse using regular expressions

这里是重新基于的解决方案:

Here is re-based solution:

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)
>>> 

这篇关于如何从一个简单的字符串构造一个 timedelta 对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆