将datetime字符串快速转换为秒(Python3)

时间:2017-09-05 08:13:49

标签: python performance python-3.x

尝试将大量的记录(时间序列)转换为int,如下所示:

seconds_time = int(time.mktime(time.strptime(parts[0], '%Y%m%d %H%M%S')))

不幸的是,这是代码的瓶颈(耗时增加约 20 )。有任何改进建议吗?

提前致谢

1 个答案:

答案 0 :(得分:4)

实际上有一种方法可以大大减少解析时间。

import time

start = time.time()

nb_loops = 1000000
time_string = "20170101 201456"
for i in range(nb_loops):
    seconds_time = int(time.mktime(time.strptime(time_string, '%Y%m%d %H%M%S')))
print(time.time()-start)

第一个循环在12秒内运行。我承认不太好。

但是,因为你的格式很简单,为什么不在列表推导中使用切片进行整数转换(并为缺少的字段添加0,如毫秒,......)并将结果传递给{ {1}}。

mktime

在3秒内运行(保存解析start = time.time() for i in range(nb_loops): seconds_time = time.mktime(tuple([int(time_string[s:e]) for s,e in ((0,4),(4,6),(6,8),(9,11),(11,13),(13,15))]+[0,0,0])) print(time.time()-start) 格式字符串,这似乎需要一段时间)。

使用编译的正则表达式稍快一些:

'%Y%m%d %H%M%S'

结果:

import re
r = re.compile("(....)(..)(..) (..)(..)(..)")
start = time.time()

for i in range(nb_loops):
    seconds_time = time.mktime(tuple(map(int,r.match(time_string).groups()))+(0,0,0))
print(time.time()-start)