如何解析tim

2024-09-28 22:00:48 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以在不使用类似s.spilt()之类的黑客工具的情况下解析接下来的时间?你知道吗

s = 'PT1H28M26S'

我想得到:

num_mins = 88

Tags: 方法时间情况numminsspiltpt1h28m26s
3条回答

可以使用time.strptime函数将字符串转换为日期对象,然后只需使用tm_hourtm_min方法获得hourminute

>>> import time
>>> t=time.strptime('PT1H28M26S', "PT%HH%MM%SS")
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=28, tm_sec=26, tm_wday=0, tm_yday=1, tm_isdst=-1)

>>> t.tm_hour * 60 + t.tm_min
88

用translate去除p、T和M,然后用split提取秒数和分钟数:

s = 'PT1H28M26S'

hr, min = map(int, s.translate(None,"PTMS")[:-2].split("H"))
print(hr,min)
(1, 28)

如果您可能有个位数的秒数,请将其删除:

hr,min =  map(int,s[2:].rstrip("0123456789S")[:-1].split("H"))

一些计时显示查找效率最高,时间最少:

In [38]: r  = re.compile(r"PT(\d+)H(\d+)M(\d+)S")

In [39]: %%timeit
   ....: match = r.search(s)
   ....: h, m, _ = map(int, match.groups())
   ....: 
100000 loops, best of 3: 3.16 µs per loop

In [40]: timeit t=time.strptime('PT1H28M2S', "PT%HH%MM%SS")
100000 loops, best of 3: 13.3 µs per loop

In [41]: timeit hr, min = map(int,s[2:].rstrip("0123456789S")[:-1].split("H"))
100000 loops, best of 3: 1.96 µs per loop
In [43]: timeit num_mins = int(s[s.find('H')-1]) * 60 +   int(s[s.find('H')+1:s.find('M')]) 
1000000 loops, best of 3: 1.54 µs per loop

您可以使用regular expression

>>> match = re.search(r"PT(\d+)H(\d+)M(\d+)S", s)
>>> h, m, s = map(int, match.groups())
>>> num_mins = h * 60 + m
>>> num_mins
88

相关问题 更多 >