使用python解析常见日志日期字符串
作者:互联网
问题:
我要解析Python 2.6中的日志文件.将common log日期字符串解析为时间对象时出现了问题:
2012年9月13日:06:27:18 0200
我已经尝试过的
使用dateutils.parser.parse
我已经尝试使用dateutils.parser.parse,但是它解析失败,并出现以下错误:
ValueError:未知的字符串格式
使用time.strptime
我尝试使用格式字符串%d /%b /%Y:%H:%M:%S%z的time.strptime,但在解析时区时遇到了麻烦:
ValueError:’z’是格式为’%d /%b /%Y:%H:%M:%S%z’的错误指令
有谁知道错误在哪里?还是只是错误的方法?
最终解决方案
最后,我决定使用time.strptime剥离时区信息:
time.strptime(datestring[:-6], '%d/%b/%Y:%H:%M:%S')
不想使用dateutils的原因是dateutils比strptime(实际上调用C函数)要慢得多.
解决方法:
这是我看到的:
> 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))
提醒一下,要替换的可选第三个参数是max replacement count.
标签:python-2-6,datetime,python,parsing 来源: https://codeday.me/bug/20191031/1979115.html