有没有比Python的strftime更快的替代方法?

ski*_*789 5 python strftime

我正在用Python处理数十万个日期,并注意到该strftime函数非常慢。

我使用timeit进行检查,它告诉我大约需要0.004,这对于少量数字是好的,但是例如处理几千个就变得有问题。

print(min(timeit.Timer("now.strftime('%m/%d/%Y')", setup=setup).repeat(7,1000))
Run Code Online (Sandbox Code Playgroud)

有没有更快的选择?

mha*_*wke 7

由于您具有严格的格式,因此您可以直接访问datetime对象的字段并使用 Python 字符串格式来构造所需的字符串:

'{:02d}/{:02d}/{}'.format(now.month, now.day, now.year)
Run Code Online (Sandbox Code Playgroud)

在 Python 3 中,这比strftime(). Python 2 中的速度也更快,大约快 2-3 倍。

Python 3 中“旧”风格的字符串插值再次更快:

'%02d/%02d/%d' % (now.month, now.day, now.year)
Run Code Online (Sandbox Code Playgroud)

大约快 5 倍,但我发现这个对于 Python 2 来说要慢一些。

另一种选择是使用time.strftime()以下命令,但速度仅提高 1.5 倍datetime.strftime()

time.strftime('%m/%d/%Y', now.timetuple())
Run Code Online (Sandbox Code Playgroud)

最后,您如何datetime开始构建该对象?如果您要将字符串转换为datetimestrptime()例如),则使用字符串切片将传入字符串版本转换为传出字符串可能会更快。