【发布时间】:2013-02-24 02:58:27
【问题描述】:
也许是个奇怪的问题,但我们开始吧:
我必须解析几个日志文件,我正在以随机顺序读取这些文件。为了对它们进行排序,我需要按提取的日志时间进行排序。
日志条目将如下所示:
l = 2001:470:1f14:169:5000:eae0:589d:c211 - SOFT12 [14/Nov/2012:09:32:46 +0100] "POST /request HTTP/1.1" 200 984 "-" "-" 181446
我可以这样提取日期:
l.split('+', 1)[0].split('-', 1)[1].split(' ')[2].split('[')[1]
这给了我:
14/Nov/2012:09:32:46
当我查看一年多的日志文件时,每天有超过 200 万条记录,我不想将任何内容转换为日期时间对象,以便可以切换格式和排序。所以我正在寻找一个纯字符串操作,它可以将字符串14/Nov/2012 的日期部分转换为可排序的2012-11-14,最好包含在我方便的拆分语句中...
问题:
如何修改字符串日期而不将其转换为日期时间对象?
【问题讨论】:
-
斜线分割,选择转换数组,将所有内容串联起来
-
考虑到日期和时间的复杂性,我个人会硬着头皮直接转换为 DateTime。当我查看接近 10 亿条记录时,我真的不希望字符串转换中出现细微的错误,导致 0.01% 的结果出现错误。细微错误的潜在来源:日志中的夏令时转换。
-
mh。没错,但现在优先考虑的是“处理时间”。
-
从您的问题来看,这听起来像是一次性操作 - 无论哪种方式都可能只需要几分钟即可运行?但是,如果您确定您的日志时间戳始终来自同一个时区,并且与 DST 没有太多有趣的业务,那么 @lc 的方法更容易,并且可能足以满足您的目的。
-
旁注:您可能可以减少用于获取日期的拆分次数,例如。
l.split("+",1)[0].split("[",1)[1]给'14/Nov/2012:09:32:46 '。这应该可以为每行节省几纳秒。
标签: python string datetime logging converter