Python 如何将标准timedelta字符串转换为timedelta对象
将标准timedelta字符串转换为timedelta对象的最简单方法是什么 我已打印了几个timedelta对象,并获得以下字符串:Python 如何将标准timedelta字符串转换为timedelta对象,python,datetime,Python,Datetime,将标准timedelta字符串转换为timedelta对象的最简单方法是什么 我已打印了几个timedelta对象,并获得以下字符串: '1157 days, 9:46:39' '12:00:01.824952' '-1 day, 23:59:31.859767' 我知道我可以自己编写解析器,但有没有更简单的解决方案?除了自己编写解析器,我找不到更好的方法。代码看起来很庞大,但本质上是将字符串解析到字典中,这不仅对创建timedelta对象有用 import re def parse(s):
'1157 days, 9:46:39'
'12:00:01.824952'
'-1 day, 23:59:31.859767'
我知道我可以自己编写解析器,但有没有更简单的解决方案?除了自己编写解析器,我找不到更好的方法。代码看起来很庞大,但本质上是将字符串解析到字典中,这不仅对创建timedelta对象有用
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()}
希望这能满足您的需要。这是Ray的答案的更新,适用于Python 3。如果为正则表达式提供了用于解析的坏字符串,它将返回空字符串,否则将返回timedelta对象
from datetime import timedelta
import re
def parse_timedelta(stamp):
if 'day' in stamp:
m = re.match(r'(?P<d>[-\d]+) day[s]*, (?P<h>\d+):'
r'(?P<m>\d+):(?P<s>\d[\.\d+]*)', stamp)
else:
m = re.match(r'(?P<h>\d+):(?P<m>\d+):'
r'(?P<s>\d[\.\d+]*)', stamp)
if not m:
return ''
time_dict = {key: float(val) for key, val in m.groupdict().items()}
if 'd' in time_dict:
return timedelta(days=time_dict['d'], hours=time_dict['h'],
minutes=time_dict['m'], seconds=time_dict['s'])
else:
return timedelta(hours=time_dict['h'],
minutes=time_dict['m'], seconds=time_dict['s'])
从日期时间导入时间增量
进口稀土
def parse_timedelta(戳记):
如果邮票上有“天”:
m=重新匹配(r'(?P[-\d]+)天*,(?P\d+):'
r'(?P\d+):(?P\d[\.\d+]*),印章)
其他:
m=重新匹配(r'(?P\d+):(?P\d+):'
r'(?P\d[\.\d+]*),印章)
如果不是m:
返回“”
time_dict={key:float(val)表示键,val表示m.groupdict().items()}
如果“d”及时通知:
返回时间增量(天=时间,小时=时间,
分钟=时间,秒=时间
其他:
返回时间增量(小时=时间['h'],
分钟=时间,秒=时间
Bigger picture:为什么要尝试往返对象>字符串>对象?@jonrsharpe我需要使用API,它将timedelta对象返回为字符串。与@jonrsharpe相同-您遇到了什么情况。往返时间增量最直接的方法是seconds=timedelta\u obj.total\u seconds()
然后timedelta\u obj=timedelta(seconds=seconds)
…哇。。。对于API来说,这是一个荒谬的反应。无论如何,没有内置的Python方法。所以,你是在写你自己的,或者在看pypi/github/等等之后。。。要查看是否有人已经这样做了……注意:您可以将iteritems()更改为items(),这将在Python 3中起作用
from datetime import timedelta
import re
def parse_timedelta(stamp):
if 'day' in stamp:
m = re.match(r'(?P<d>[-\d]+) day[s]*, (?P<h>\d+):'
r'(?P<m>\d+):(?P<s>\d[\.\d+]*)', stamp)
else:
m = re.match(r'(?P<h>\d+):(?P<m>\d+):'
r'(?P<s>\d[\.\d+]*)', stamp)
if not m:
return ''
time_dict = {key: float(val) for key, val in m.groupdict().items()}
if 'd' in time_dict:
return timedelta(days=time_dict['d'], hours=time_dict['h'],
minutes=time_dict['m'], seconds=time_dict['s'])
else:
return timedelta(hours=time_dict['h'],
minutes=time_dict['m'], seconds=time_dict['s'])