2015-02-09 109 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)