尝试像这样将大量记录(时间序列)转换为 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 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
关于python - 将日期时间字符串快速转换为秒 (Python3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46050064/