我有一大组日期时间字符串,可以安全地假设它们的格式相同。例如,我可能有一组日期“7/1/13 0:45”,“5/2/13 6:21”,“7/15/13 1:24”,“7/9/13 12 :41“,”4/30/13 3:12“。我们的想法是以合理的可靠性来获得它们的通用格式,以便可以使用strptime或类似方法对它们进行解析。
有没有简单的方法来猜测格式?理想情况下,这是一个图书馆吗?
答案 0 :(得分:3)
查看https://github.com/jeffreystarr/dateinfer
似乎有点遗弃但也许它会满足您的需求。
答案 1 :(得分:1)
您是否尝试在集合中使用dateutil.parser.parse
标记化的时间字符串?
对于各种格式,它通常非常强大,或者从错误中获得的信息很明显,如何将数据轻微按摩到可以使用的格式。
In [11]: dateutil.parser.parse("7/1/13 0:45")
Out[11]: datetime.datetime(2013, 7, 1, 0, 45)
请注意数据中的含糊之处。例如,它看起来不像您的时间戳使用24小时,而是在同一天报告“3:00 pm”和“3:00 am”相同。除非您有某种方式将am / pm分配给数据,否则解析器无法帮助您解决该问题。
如果您的日期字符串存储在iterable
中,那么您可以使用map
将解析函数应用于所有字符串:
In [12]: the_dates = ["7/1/13 0:45", "12/2/14 1:38", "4/30/13 12:12"]
In [13]: map(dateutil.parser.parse, the_dates)
Out[13]:
[datetime.datetime(2013, 7, 1, 0, 45),
datetime.datetime(2014, 12, 2, 1, 38),
datetime.datetime(2013, 4, 30, 12, 12)]
如果您需要dateutil.parser.parse
的一些额外参数来指示要使用的格式,您可以使用functools.partial
首先绑定这些关键字参数,然后使用{{1如上所述应用部分函数。
例如,假设您要格外小心将DAY视为第一个数字。你总是可以使用额外的参数map
来调用parse
,或者你可以预先绑定这个参数并将其视为一个总是具有这个属性的新函数。
dayfirst=True
(请注意,在此示例中,第三个日期无法使用第一天进行解析,因为30和13都不是一个月......所以在这种情况下它会回退到默认格式。)