Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将日期时间字符串快速转换为秒(Python3)_Python_Performance_Python 3.x - Fatal编程技术网

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

将日期时间字符串快速转换为秒(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

尝试将大量记录(时间序列)转换为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

使用多处理。但是,这仍然是代码中最薄弱的一点…很好!非常感谢,真的快多了!不客气。如果它对你有用,请考虑接受答案;再次感谢