在python中将字符串解析为时间值

在python中将字符串解析为时间值,python,string,datetime,Python,String,Datetime,我需要将以下字符串转换为datetimes或其他格式的字符串。我的输入如下所示: 196h 26m 13s 95h 19m 45米28秒 我想要的字符串输出是(但我的最终目标是将这些字符串转换为datetime对象): 196:26:13 95:19:00 00:45:28 在Excel中,它应该是[h]:mm:ss 注意:如您所见,小时数可能高于24小时 我曾尝试使用time.strtime()方法解析此字符串,但它在小时数超过24小时时不起作用。我有一个正则表达式的解决方案,但我想知道是否有

我需要将以下字符串转换为datetimes或其他格式的字符串。我的输入如下所示:

196h 26m 13s
95h 19m
45米28秒

我想要的字符串输出是(但我的最终目标是将这些字符串转换为
datetime
对象):

196:26:13
95:19:00
00:45:28

在Excel中,它应该是
[h]:mm:ss

注意:如您所见,小时数可能高于24小时


我曾尝试使用
time.strtime()
方法解析此字符串,但它在小时数超过24小时时不起作用。我有一个正则表达式的解决方案,但我想知道是否有更直接的方法来实现这一点。解决此问题的最佳方法是什么?

这将为您提供时间增量:

from datetime import timedelta

def to_timedelta(time_string):
    units = {'h': 'hours', 'd': 'days', 'm': 'minutes', 's': 'seconds'}
    return timedelta(**{units[x[-1]]: int(x[:-1]) for x in time_string.split()})
测试:

输出:

8 days, 4:26:13
3 days, 23:19:00
0:45:28
8 days, 4:00:00
3 days, 23:00:00
0:45:00
接受这些论点

timedelta(天=0,秒=0,微秒=0,毫秒=0,分钟=0,小时=0,周=0)

使用此映射:

units = {'h': 'hours', 'd': 'days', 'm': 'minutes', 's': 'seconds'}
允许将字符串中的短单位映射到参数的相应名称。
使用Pythons
**
语法,生成的字典可以用作单个参数,该参数将转换为匹配的关键字参数。

我们应该做的第一件事是使用正则表达式并使用timedelta而不是datetime

import datetime
import re

regex = re.compile(r'((?P<hours>\d+?)h)?((?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 datetime.timedelta(**time_params)


L = ["196h 26m 13s", "95h 19m", "45m 28s"]

for l in L:
    print(parse_time(l))

这些不是时间点;这些都是持续时间。因此,
datetime
date
time
是完全错误的使用类型;正确的类型是
timedelta
,它没有内置的字符串解析方法。我会去找tooThanks的人寻求帮助!我会守着那条老规矩谢谢!我有一个基于regex的非常类似的解决方案
8 days, 4:00:00
3 days, 23:00:00
0:45:00