2024-04-30 03:10:25 发布
网友
我正在用Python处理数十万个日期,注意到strftime函数非常慢。在
strftime
我用timeit来检查,它告诉我大约需要0.004,这对于一个小的数字来说是可以的,但是对于处理几千个这样的数据就有问题了。在
print(min(timeit.Timer("now.strftime('%m/%d/%Y')", setup=setup).repeat(7,1000))
有没有更快的选择?在
这在我的机器上稍微快一些(python 2.7.x)
def fmt(date): return "%02d/%02d/%d" % (date.month, date.day, date.year)
由于您有一个严格的格式,您只需直接访问datetime对象的字段,并使用Python字符串格式来构造所需的字符串:
datetime
'{:02d}/{:02d}/{}'.format(now.month, now.day, now.year)
在Python3中,这大约比strftime()快4倍。Python2的速度也更快,大约是2-3倍。在
strftime()
Python 3中更快的是“旧”样式的字符串插值:
大约快了5倍,但是我发现这个对于python2来说要慢一些。在
另一个选择是使用^{},而不是{},但速度只有1.5倍:
time.strftime('%m/%d/%Y', now.timetuple())
最后,如何构造datetime对象?如果要将字符串转换为datetime(例如,strptime()),则使用字符串切片将传入字符串版本转换为传出字符串版本可能会更快。在
strptime()
这在我的机器上稍微快一些(python 2.7.x)
由于您有一个严格的格式,您只需直接访问
datetime
对象的字段,并使用Python字符串格式来构造所需的字符串:在Python3中,这大约比
strftime()
快4倍。Python2的速度也更快,大约是2-3倍。在Python 3中更快的是“旧”样式的字符串插值:
^{pr2}$大约快了5倍,但是我发现这个对于python2来说要慢一些。在
另一个选择是使用^{} ,而不是{},但速度只有1.5倍:
最后,如何构造
datetime
对象?如果要将字符串转换为datetime
(例如,strptime()
),则使用字符串切片将传入字符串版本转换为传出字符串版本可能会更快。在相关问题 更多 >
编程相关推荐