【发布时间】:2021-08-31 03:57:17
【问题描述】:
我希望将任何字符串转换为日期时间,遵循任何日期时间格式, 不尝试转换其他字符串,如常规文本。我现在在做什么:
from datetime import datetime
import re
pattern = r"\d{4}[-/]\d{2}[-/]\d{2}\s\d{2}:\d{2}:\d{2}"
regex = re.compile(pattern)
def cast_to_dt(TEXT):
"""Match datetimes, and convert them."""
res = regex.match(TEXT)
if res is None:
return TEXT
print(res.group(0))
hash = {"-": "%Y-%m-%d %H:%M:%S", "/": "%Y/%m/%d %H:%M:%S"}
dt_obj = ""
if "-" in res.group(0):
dt_obj = datetime.strptime(res.group(0), hash["-"])
if "/" in res.group(0):
dt_obj = datetime.strptime(res.group(0), hash["/"])
print(dt_obj, type(dt_obj))
TEXT_10 = "2021-05-12 11:22:14"
TEXT_11 = "2021/05/12 11:22:14"
TEXT_20 = "I am definitely not a datetime"
cast_to_dt(TEXT_10)
cast_to_dt(TEXT_11)
cast_to_dt(TEXT_20)
我根据hash 字典设置格式的方法一旦开始增长就不会那么可读了。有没有更好的方法来自动检测或选择格式?
【问题讨论】:
-
这就是你要找的东西吗? stackoverflow.com/questions/9507648/…
-
Nit-pick:您正在覆盖内置的
hash函数 ;-) 还有关于 dateutil 的旁注;它非常方便,但要付出代价:性能。 -
@MrFuppes 谢谢。我不知道 Python 中有一个内置的
hash函数。那么我应该选择一个不同的名称:) 性能也很好。这可能会成为一个问题。但是如果没有这个dateutil库,我不确定如何通常捕获所有时间戳并进行转换。有什么想法吗? -
我想你必须为你的用例做出决定。您进行格式检查和验证的越具体,您就越能优化性能。对于您的示例,我认为通过 datetime.fromisoformat 编译的正则表达式 + 验证将是一个高性能匹配(甚至没有 re),但接受的格式非常有限。
标签: python python-3.x regex string datetime