python - 将日期时间字符串快速转换为秒 (Python3)

标签 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 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/

相关文章:

python - Python 3 中的导入后 Hook

python - geopandas 对 sjoin 函数的误解

java - 在循环中重用 StringBuilder 会更好吗?

c++ - Julia 表演建议

python - 获取两个指定元素之间的所有列表元素

python - 文件夹逻辑中的重复图像

python - pulp solve 函数给出相同的输出

python - 格式化数值与舍入值之间的差异

mysql - mysql query_cache_min_res_unit 的最小值

python - 在 Python 中的特定网络位置打开 Windows 资源管理器