我在Python中处理了数十万个日期,并注意到strftime
函数非常慢。
我使用timeit进行检查,它告诉我它大约需要0.004,这对于一个小数字来说很好,但是例如处理几千个就会有问题。
print(min(timeit.Timer("now.strftime('%m/%d/%Y')", setup=setup).repeat(7,1000))
有没有更快的替代方案?
答案 0 :(得分:2)
由于您的格式严格,您可以直接访问datetime
对象的字段,并使用Python字符串格式来构造所需的字符串:
'{:02d}/{:02d}/{}'.format(now.month, now.day, now.year)
在Python 3中,这比strftime()
快4倍。它在Python 2中也更快,大约快2-3倍。
Python 3中再次出现的是“旧”样式字符串插值:
'%02d/%02d/%d' % (now.month, now.day, now.year)
快了大约5倍,但我发现Python 2的速度要慢一些。
使用time.strftime()
代替datetime.strftime()
的另一个选项,但速度仅提高1.5倍:
time.strftime('%m/%d/%Y', now.timetuple())
最后,您是如何构建datetime
对象的?如果要将字符串转换为datetime
(例如,使用strptime()
),则使用字符串切片将传入的字符串版本转换为传出字符串版本可能会更快。
答案 1 :(得分:0)
我的盒子(python 2.7.x)
略快一些def fmt(date):
return "%02d/%02d/%d" % (date.month, date.day, date.year)