如何从给定的Timedelta列表中提取仅时间部分内容?
提取Timedelta列表中的时间部分
嘿,这个问题我之前刚好处理过,其实有几种简单的方式可以搞定!
方法一:直接字符串切片(最快捷)
你给出的所有Timedelta对象的字符串表示都是"0 days HH:MM:SS.ffffff"格式,所以我们可以直接把每个对象转成字符串后,切掉开头的"0 days "部分(刚好是9个字符):
from datetime import timedelta # 你的Timedelta列表 delta_list = [ timedelta('0 days 00:02:39.210526'), timedelta('0 days 00:03:29.033333'), timedelta('0 days 00:03:36.333333'), timedelta('0 days 00:01:04'), timedelta('0 days 00:04:05.571428'), timedelta('0 days 00:04:00.500000'), timedelta('0 days 00:03:54.583333') ] # 提取时间部分 time_parts = [str(delta)[9:] for delta in delta_list] print(time_parts)
运行后会得到这样的结果:
['00:02:39.210526', '00:03:29.033333', '00:03:36.333333', '00:01:04', '00:04:05.571428', '00:04:00.500000', '00:03:54.583333']
方法二:自定义格式化(更灵活)
如果需要对时间格式做调整(比如去掉微秒、或者处理超过1天的Timedelta),可以通过计算总秒数来手动格式化:
比如想要去掉微秒的版本:
def format_delta(delta): total_sec = int(delta.total_seconds()) hours = total_sec // 3600 mins = (total_sec % 3600) // 60 secs = total_sec % 60 return f"{hours:02d}:{mins:02d}:{secs:02d}" # 应用到列表 time_parts_no_ms = [format_delta(d) for d in delta_list] print(time_parts_no_ms)
输出结果:
['00:02:39', '00:03:29', '00:03:36', '00:01:04', '00:04:05', '00:04:00', '00:03:54']
如果需要保留微秒,只需要在函数里加上微秒的处理就行:
def format_delta_with_ms(delta): total_sec = int(delta.total_seconds()) hours = total_sec // 3600 mins = (total_sec % 3600) // 60 secs = total_sec % 60 ms = delta.microseconds return f"{hours:02d}:{mins:02d}:{secs:02d}.{ms:06d}"
小提示
如果你的Timedelta有可能超过1天(比如3 days 05:10:20),那第一种切片方法就不适用了,这时候可以用方法二,把天数转换成小时加到总小时数里:
def format_long_delta(delta): total_hours = delta.days * 24 + (delta.seconds // 3600) mins = (delta.seconds % 3600) // 60 secs = delta.seconds % 60 return f"{total_hours:02d}:{mins:02d}:{secs:02d}"
内容的提问来源于stack exchange,提问作者chu
相关产品推荐
相关产品推荐

