如何将标准timedelta字符串转换为timedelta对象 [英] How to convert standard timedelta string to timedelta object

查看:250
本文介绍了如何将标准timedelta字符串转换为timedelta对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将标准timedelta字符串转换为timedelta对象的最简单方法是什么?

What is the simplest way to convert standard timedelta string to timedelta object?

我已经打印了几个timedelta对象并得到了以下字符串:

I have printed several timedelta objects and got these strings:

'1157 days, 9:46:39'
'12:00:01.824952'
'-1 day, 23:59:31.859767'

我知道我可以自己编写解析器,但是有没有更简单的解决方案?

I know I could write parser myself, but is there any simpler solution?

推荐答案

除了自己编写解析器外,我找不到其他更好的方法。代码看起来很庞大,但实际上是将字符串解析成字典,不仅对创建timedelta对象有用。

I cannot find a better way other than writing a parser myself. The code looks bulky but it is essentially parsing string into a dictionary which is useful not only to creating a timedelta object.

import re

def parse(s):
    if 'day' in s:
        m = re.match(r'(?P<days>[-\d]+) day[s]*, (?P<hours>\d+):(?P<minutes>\d+):(?P<seconds>\d[\.\d+]*)', s)
    else:
        m = re.match(r'(?P<hours>\d+):(?P<minutes>\d+):(?P<seconds>\d[\.\d+]*)', s)
    return {key: float(val) for key, val in m.groupdict().iteritems()}

测试:

from datetime import timedelta

s1 = '1157 days, 9:46:39'
s2 = '12:00:01.824952'
s3 = '-1 day, 23:59:31.859767'
t1 = parse(s1)
t2 = parse(s2)
t3 = parse(s3)

timedelta(**t1) # datetime.timedelta(1157, 35199)
timedelta(**t2) # datetime.timedelta(0, 43201, 824952)
timedelta(**t3) # datetime.timedelta(-1, 86371, 859767)

希望这可以满足您的目的。

Hope this can suit your purpose.

这篇关于如何将标准timedelta字符串转换为timedelta对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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