3

问题:

我即将在 Python 2.6 中解析一个日志文件。将通用日志日期字符串解析为时间对象时出现问题:

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 函数)慢得多。

4

1 回答 1

4

这就是我所看到的:

  • dateutil不喜欢在日期后面加上时间
  • %z您的底层 C 实现不支持该指令(请参阅此问题

一个快速简单的解决方案(虽然,不是很优雅):

>>> 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))

提醒一下,可选的第三个参数 toreplace最大替换计数

于 2012-09-17T14:37:34.977 回答