我正在用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)
有没有更快的选择?
由于您具有严格的格式,因此您可以直接访问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开始构建该对象?如果您要将字符串转换为datetime(strptime()例如),则使用字符串切片将传入字符串版本转换为传出字符串可能会更快。
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |