将日期时间字符串快速转换为秒(Python3)
尝试将大量记录(时间序列)转换为int,如下所示:将日期时间字符串快速转换为秒(Python3),python,performance,python-3.x,Python,Performance,Python 3.x,尝试将大量记录(时间序列)转换为int,如下所示: seconds_time = int(time.mktime(time.strptime(parts[0], '%Y%m%d %H%M%S'))) 不幸的是,这是代码的瓶颈(耗时增加了大约20倍)。有什么改进的建议吗 提前感谢实际上有一种方法可以大大缩短解析时间 import time start = time.time() nb_loops = 1000000 time_string = "20170101 201456" for i
seconds_time = int(time.mktime(time.strptime(parts[0], '%Y%m%d %H%M%S')))
不幸的是,这是代码的瓶颈(耗时增加了大约20倍)。有什么改进的建议吗
提前感谢实际上有一种方法可以大大缩短解析时间
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,如毫秒,…),然后将结果传递给mktime
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)
这将在3秒钟内运行(保存对'%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)
结果:
basic 14.41410493850708
string slicing 3.1356000900268555
regex 2.8703999519348145
使用多处理。但是,这仍然是代码中最薄弱的一点…很好!非常感谢,真的快多了!不客气。如果它对你有用,请考虑接受答案;再次感谢