2015-02-09 50 views
0

我正在阅读具有不同日期格式的不同日志文件。我正在使用python逐行读取文件,然后解析该行。我想解析日期的行,然后将它们制定成日期对象以进行比较。Python创建日期对象以过滤某些日期

例如,假设我有两个具有不同日期格式的日志文件。如何将它们读入对象以将其与已知日期进行比较。举例来说,我想在某个时间之前放弃所有的日期。

假设第一个日志文件只具有一行:

invalid access 2015-01-04 14:23:15 on IP 5.5.5.5 

如何阅读2015-01-04 14:23:15成dateobject(所以我可以做比较)

如果日期格式是不同的?我将如何阅读?

+0

如果时间字符串表示本地时间,那么您需要将其转换为UTC或POSIX时间进行比较,因为本地时间非单调。看[如果24小时之间已经通过日期时间之间传递 - Python](http://stackoverflow.com/a/26313848/4279) – jfs 2015-02-10 23:29:30

+0

相关:[如何解析ISO格式的日期在Python?](http://stackoverflow.com/q/127803/4279) – jfs 2015-02-10 23:36:12

回答

0

dateutil通常可以解析任何

import dateutil.parser as p 
print p.parse("2015-01-04 14:23:15") 

这个假设可以隔离您datestring

或只是在https://pypi.python.org/pypi/python-dateutil/2.4.0实现的,如果你需要源...

+0

指向['dateutil'](https://pypi.python.org/pypi/python-dateutil/2.4.0)的链接可能很有用,因为它不在stdlib中。 – mgilson 2015-02-09 22:01:31

+0

@mgilson ok:P – 2015-02-09 22:04:12

1

您可以使用datetime.datetime.strptime

In [1]: from datetime import datetime 
In [2]: d = '2015-01-04 14:23:15' 
In [3]: datetime.strptime(d, '%Y-%m-%d %H:%M:%S') 
Out[3]: datetime.datetime(2015, 1, 4, 14, 23, 15) 

对于其它的格式,请the documentation

0

使用re模块直接可能会比隐含使用它通过datetime.strptime()(衡量它以找出是否在您的案件事项)更高效:

>>> import datetime, re 
>>> s = '2015-01-04 14:23:15' 
>>> datetime.datetime(*map(int, re.findall('\d+', s))) 
datetime.datetime(2015, 1, 4, 14, 23, 15)