使用python解析公共日志字符串

时间:2012-09-17 14:28:17

标签: python parsing datetime python-2.6

问题:

我即将解析Python 2.6中的日志文件。问题出现了将common log日期字符串解析为时间对象:

13/Sep/2012:06:27:18 +0200

我已经尝试了什么

使用dateutils.parser.parse

我已经尝试使用dateutils.parser.parse,但无法使用以下错误解析它:

ValueError: unknown string format

使用time.strptime

我尝试使用格式字符串time.strptime %d/%b/%Y:%H:%M:%S %z,但在解析时区时遇到了麻烦:

ValueError: 'z' is a bad directive in format '%d/%b/%Y:%H:%M:%S %z'

有谁知道,错误在哪里?或者这只是错误的做法?

最终解决方案

最后,我决定使用time.strptime来删除时区信息:

time.strptime(datestring[:-6], '%d/%b/%Y:%H:%M:%S')

不想使用dateutils的原因是dateutilsstrptime慢(实际上调用了C函数)。

1 个答案:

答案 0 :(得分:4)

这就是我所看到的:

  • dateutil不喜欢将时间附加到日期
  • 您的基础C实现不支持%z指令(请参阅this question

快速简便的解决方案(但不是很优雅):

>>> s = '13/Sep/2012:06:27:18 +0200'
>>> dateutil.parser.parse(s.replace(':', ' ', 1))
datetime.datetime(2012, 9, 13, 6, 27, 18, tzinfo=tzoffset(None, 7200))

提醒一下,replace的可选第三个参数是max replacement count