Data_Extractor Python输出错误的一年

时间:2017-03-19 22:11:49

标签: python date datetime time

我正在尝试完成一项相当简单的任务 - 从一组电子邮件中提取日期(所有时间戳)。我尝试了一些不同的Python软件包,但似乎都没有。下面是

from date_extractor import extract_dates

y = "Message-ID: <18782981.1075855378110.JavaMail.evans@thyme> Date: Mon, 14 May 2001 16:39:00 -0700 (PDT)"
dates = extract_dates(y)  
for i in dates:
    print i

结果:

2010-08-01 00:00:00+00:00
2001-05-14 00:00:00+00:00
1939-01-06 00:00:00+00:00
2018-01-01 00:00:00+00:00
2007-01-01 00:00:00+00:00

正确的时间戳(2001-05-14)就在那里,但其他一些随机日期也是如此。关于为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:1)

您使用的库假设所有数字都是日期。如果您的电子邮件具有相似的格式,您可以通过仅提供日期段来帮助库,例如::

>>> import re
>>> y = "Message-ID: <18782981.1075855378110.JavaMail.evans@thyme> Date: Mon, 14 May 2001 16:39:00 -0700 (PDT)"
>>> re.search(r'Date: (\w+), ([^:]*) \d{2}:', y).group(2)
'14 May 2001'

然后,您可以将group(2)传递给extract_dates(y)功能。如果您使用dateutil,则可以执行::

>>> from dateutil import parser
>>> re.search(r'Date: (\w+), ([^:]*) \d{2}:', y).group(2)
'14 May 2001'
>>> parser.parse(_)
datetime.datetime(2001, 5, 14, 0, 0)
>>> 

我不知道现有的python库可以处理你的情况而不需要进行一些预解析。

答案 1 :(得分:0)

字符串中还有许多其他数字可以视为日期 请尝试以下,看看是否有帮助

from dateutil.parser import parse
y = "Message-ID: <18782981.1075855378110.JavaMail.evans@thyme> Date: Mon, 14 May 2001 16:39:00 -0700 (PDT)"
d = y.split('Date: ')[1]
ts = parse(d)
print(ts)